美文网首页iOS精华临时收藏程序员
iOS集成极光推送遇到的几个问题

iOS集成极光推送遇到的几个问题

作者: 北落鰤門 | 来源:发表于2016-02-02 16:13 被阅读8007次

    其实官方的iOS SDK 集成指南iOS SDK 教程两个文档关于集成时的大部分问题都可以解决,所以我这里只是讨论我遇见的文档里表述不明白的那几个坑(2.1.0版本的)。

    1、APNs证书和主证书的区别


    我刚开始做推送的时候本来以为APNs证书就是主证书里加了个允许推送而已,事实证明我还是太天真了。



    首先是创建Provisioning Profile文件时选择证书列表时是不能选择APNs证书的,而且在XCode里Code Signing也是不能选择的。
    APNs证书其实是只表示了有推送功能,主证书还是必不可少的。所以现在只是又添加了两个证书,其他的是不用变的,所以现在就有4个证书了。作为一个有轻微强迫症的人,创建完APNs证书就顺手把主证书删了,在这里让我折腾了好久。

    2、启动SDK需要传的参数

    + (void)setupWithOption:(NSDictionary *)launchingOption
                     appKey:(NSString *)appKey
                    channel:(NSString *)channel
           apsForProduction:(BOOL)isProduction;```
    前两个就不必说了。
    channel 发布渠道。我刚开始也不知道要怎么填,iOS?App Store?Publish channel?其实这只是一个标识而已,不会有什么具体影响。而且是可选的,所以填nil也是没关系的。
    isProduction 是否生产环境。看起来很有用的一个参数,但实际发现YES或NO是没区别的,在框架里边应该是另有判断。但还必须得填,所以在生产和开发环境之间切换时是没必要一定要改这个参数的。
    #3、[标签与别名 API](http://docs.jpush.io/client/ios_api/#api-ios)
    之前的教程文档是没有这个的,下载的Demo里也没有。但是项目里肯定是要有这个的。
    >###别名 alias
    为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。每个用户只能指定一个别名。
    ###标签 tag
    为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。可为每个用户打多个标签。
    
    
    
    • (void) setTags:(NSSet *)tags alias:(NSString *)alias fetchCompletionHandle:(void (^)(int iResCode, NSSet *iTags, NSString *iAlias))completionHandler;```
      call back结果可以忽略,但最好判断一下, 返回值为 0 才设置成功,才可以向目标推送。我一般是有block就不会用其他的,但使用block时需要注意循环引用问题。

    4、收到通知后的处理

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler```
    是在iOS7之后的方法,所以之前的方法可以不用了。
    
    • (void)applicationWillEnterForeground:(UIApplication *)application```
      applicationWillEnterForegroun是在didReceiveRemoteNotification之后运行的,所以在这个方法里想处数据是不行的。然后[application setApplicationIconBadgeNumber:0];是偶尔会抽风一下的,所以最好这样写:
    [application setApplicationIconBadgeNumber: 1];
    [application setApplicationIconBadgeNumber:0];```
    当然,不要忘了`[application cancelAllLocalNotifications];`
    
    还有,关于跳转到特定页面的问题。反正我是没找到如何在AppDelegate里找到当前的页面,所以只能用`self.window.rootViewController`了。返回的话直接`self.view.window.rootViewController = vc;`吧。
    记得用`application.applicationState == UIApplicationStateActive`判断一下应用处于的状态。如果用户正在运行应用,或许还有更好的,但我就是弹一个UIAlertView。

    相关文章

      网友评论

      • 取瓢祸水饮:求助 目标有一个但是成功0个 就是收不到消息
      • Kevin__:求分享下 设置别名里的代码~ :smile:
        来宝:@Kevin__ 你好,现在有设置别名的代码了吗?
      • 一抹相思泪成雨:你好!!我想问的是isProduction 是否生产环境。 无论写什么都能接收到吗??我用的版本是1.7的吧。那个plist的APS_FOR_PRODUCTION 值跟调式 0 或者发布 1 有关系吗??急。。。。。
        b1db5d6a3349:@Hoolink 0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
        北落鰤門:@Hoolink 不好意思,之前的版本我不太清楚……最新的版本已经不需要plist了,你可以考虑更新一下……

      本文标题:iOS集成极光推送遇到的几个问题

      本文链接:https://www.haomeiwen.com/subject/pqoskttx.html