总结:关于极光推送的干货

写在前面的废话:搞了一天,明白了极光推送的部分原理和使用方法。在此分享给大家。

JPush 是日常开发中比较常用的推送方式。实现简单,功能全面。

下面将简单的介绍一下我在接入JPush的方法。

  • JPush 集成
    JPush 快速集成指南
    JPush 配置证书指南
    开发文档写的都比较详细,请先仔细阅读。

  • AppDelegate 里需要添加的方法
    在 AppDelegate 中会用到的方法 ,我们将 JPush 的代码写入其中,就完成了 JPush 的集成。

** 更新**:程序加载完毕或启动时 或者 当App在未运行状态下通过点击推送通知启动时

在这里完成JPush的注册,因为我的程序只兼容到iOS8.0,而且是首次嵌入JPush所以并没有做过多的判断
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound |UIUserNotificationTypeAlert) categories:nil];
[JPUSHService setupWithOption:options appKey:@"xxxx" channel:@"AppStore" apsForProduction:NO];

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];    
self.window.rootViewController = [[ViewController alloc]init];
return YES;}

当应用第一次运行时调用,iOS获取到devicetoken后调用,用于注册设备到apns上之后的操作
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//向JPush 注册 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];}

如果注册的时候失败,ios会调用这个方法,可以打印一些报错日志或者提醒用户通知不可用
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error); }

程序在前台或者后台的时候接收到消息,点击消息或消息图标时调用
Required,For systems with less than or equal to iOS6
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
//
[JPUSHService handleRemoteNotification:userInfo];
return;}
借用CocoaChina一位的一句话:
这货是ios7中引入的,如果实现了这货,那原先的版本application:didReceiveRemoteNotification:就不会被调用。
这货被调用后,你唯一可做的就是执行你的后台代码,然后调用completionHandler(your_result);
在iOS7中引入,是对application:didReceiveRemoteNotification:的补充,所以在这里进行判断,App现在是否是在前台,并进行处理</br>
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[JPUSHService handleRemoteNotification:userInfo];

//必须要写的方法,不然会报错:warning:Appliction delegate received call to -application:didReceiveRemoteNotification:fetchCompletionHandler: but the completion handler was never called.
completionHandler(UIBackgroundFetchResultNewData);}
if (application.applicationState == UIApplicationStateActive) {
    //在前台,要进行自己的处理
}
else {

}

在程序启动时会调用该方法
- (void)applicationDidBecomeActive:(UIApplication *)application {
[application setApplicationIconBadgeNumber:0];
return;}

JPush 也可以根据 Tag、Alias、Registration ID 进行分类型的推送,调用对应的Set 方法即可完成。
其中设置 Tag 和 Alias 时,请注意监听 kJPFNetworkDidLoginNotification,在 JPush 注册完成时再进行 Tag或者 Alias 的Set 否则将报错,在发推送时也找不到该 Tag 下的设备。

5月25日更新 在App未运行的状态时,点击推送消息启动App时会调用didFinishLaunchingWithOptions: 可以不进行特殊处理。但有一点千万千万注意,因为通过推送消息启动基本都会进行对应的页面跳转,有时会出现这样的error
<code>Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.
Unbalanced calls to begin/end appearance transitions for <XXX> </code>
是因为在上一个 Push 动画还未结束的时候 进行了下一次的 Push 操作。
如果是多层级的跳转请一定要将动画设置为NO 这是我被苦苦坑一了整天的总结,因为这种Bug 是很难被发现的。共勉,引以为戒。

到此基本完成了JPush的集成,日后再遇到各种问题,也将继续与大家讨论分享。谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,686评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,668评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,160评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,736评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,847评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,043评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,129评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,872评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,318评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,645评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,777评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,861评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,589评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,687评论 2 351

推荐阅读更多精彩内容

  • 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据...
    原军锋阅读 34,546评论 4 60
  • 版本记录 前言 前一篇已经对ios新特性进行了介绍,这一篇则对ios的SDK进行说明。1. 极光推送集成(一)2....
    刀客传奇阅读 1,283评论 0 1
  • 版本记录 前言   现在很多APP都有推送功能,其中极光推送就是很多APP的首选。我们最近的几个APP也是用的极光...
    刀客传奇阅读 8,372评论 0 8
  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 6,709评论 10 16
  • 不同版本极光推送SDK集成各有差异,集成时一定要注意版本号,楼主已将博文更新成最新的SDK JPush v3.0....
    i顺颂时宜阅读 7,853评论 37 170