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

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

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的集成,日后再遇到各种问题,也将继续与大家讨论分享。谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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

友情链接更多精彩内容