iOS JPush + 环信 推送失败

作者: 王隆帅 | 来源:发表于2016-04-05 20:38 被阅读4685次

    前言

    这两天被极光推送折磨惨了!所以特此记录一下,望遇到同样问题的童鞋不会重蹈我的覆辙...

    问题描述

    Not get deviceToken yet. Maybe: your certificate not configured APNs? or current network is not so good so APNs registration failed? or there is no APNs register code? Please refer to JPush docs.
    

    一、先贴上官方处理方法:极光推荐处理流程(来自极光官网)

    如果出现上述日志,则说明一段时间内都无法获取device token,那么:

    1、确认你的app配置了apns权限,如果未配置apns权限,则应该会出现此错误提示。

    2、确认你的app运行在ios真机而非模拟器上,且通知中心中对应app的通知权限没有完全关闭(alert/sound/badge至少有一个权限是打开的)。

    3、确认你的网络状况,与apple的服务器的连接是通过tcp的 5223端口连接,确认你网络的对应端口是否可用,可通过下列命令来确认这点:

    telnet 1-courier.push.apple.com 5223
    

    在代码中可在以下两个函数中断点以确认device token的获取状态。

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
    
    

    如果app运行进入 didFailToRegisterForRemoteNotificationsWithError 则说明app的APNS权限问题或者app运行在模拟器。

    如果app运行进入 didRegisterForRemoteNotificationsWithDeviceToken 则说明运行正常,请确认你在此函数中的代码中有将token传递给jpush的调用:

    [APService registerDeviceToken:deviceToken];
    

    如果以上两个 registerRemoteNotification 的函数都未进入, 请确认你的代码中有注册申请apns的函数调用:

    [APService registerForRemoteNotificationTypes:];
    

    如果上述情况都已确认且未进入第4步的任意回调函数,则可以判断无法获取token的原因在于设备与apple的网络连通性问题(注:一个设备只有在未申请过token的情况下才会需要与apple的网络交互来获取token,已经获取过某一环境token的设备在无网络的情况下也能获取到对应环境的token(环境分为 开发/生产)),这种情况下切换网络能够在大部分情况下解决此问题。

    二、自己的原因及处理方法

    原因

    首先我们的项目是两个人合作完成的,极光这块是我负责的,另一个人负责的环信模块,然后环信是二期加的,一期的时候极光是没问题的,然后加了环信,也一直没有测试,挡在统一测试的时候发现极光推送不管事了,因为中间换过项目名称相应的极光也换过key和重新传的证书,所以没有想过是环信的问题😢。

    然后,环信的注册推送注册获取token的回调是在AppDelegate的分类写的,极光推送的是在AppDelegate内部写的,苦的我一遍又一遍的按照官网的来查原因,甚至都换了个极光账号和新的证书,╮(╯▽╰)╭。

    解决方法

    将APPDelegate中以下内部的代码复制到环信AppDelegate+EaseMob.m中

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken;
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error;
    
    

    如下,为改后的AppDelegate+EaseMob.m中的注册Token的函数

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
    {
        [[EaseMob sharedInstance] application:application didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
        
        [APService setTags:nil alias:[OpenUDID value] callbackSelector:nil object:nil];
        [APService registerDeviceToken:deviceToken];
    }
    

    三、完事!

    相关文章

      网友评论

      • 小痕_e5bb:楼主,请问如何处理极光+环信消息的推送角标显示的呢?
        十年祤茉:哈,同问
      • 傲世泡泡:楼主是已经集成极光+环信消息的推送了?能留下联系方式吗?需要帮忙
      • Fooler:我的也是你这个问题,但是原因还是没找到,全局就只写了那一个方法
        Fooler:didRegisterForRemoteNotificationsWithDeviceToken 即这个方法只在appDelegate里有写,
      • 菜鸟吃咸鱼:😂😂,楼主你知道吗?我们的经历一模一样,当我看完你的文章,我默默地点上了一根烟,陷入沉思!我们真有缘!
        傲世泡泡:要怎么解决啊,求解
        WSWshallwe:@王隆帅 好气我也是 一期极光 二期环信 看了你的才知道:flushed:
        王隆帅:哈哈哈!来握个爪!:grin:
      • 白目de拖拉机:必须留下好评
      • my__life:退出app后,通过环信好友发送的消息数 与 极光推送的通知 角标怎么累计哦,现在是每次来了各自的消息后,角标就按照各自的计数器来显示,我想让他们总数累计在一起,显示正确的未读消息数
        Heaven7th:麻烦问一下, 你现在解决这个问题了吗? 我现在遇到一样的问题, 求帮助啊
      • my__life:楼主你好,我现在开始也是集成了极光,后来加环信。 极光的远程推送和环信的离线推送对app的icon上的applicationIconBadgeNumber互相覆盖了,这个怎么解决啊?
        十年祤茉:解决了吗
        小痕_e5bb:同问,有解决方案了吗?
        文刂Rn:有没有解决方案
      • 42e1dd428f25:呀呀呀!谁解决这个问题了!QQ:528783127,需要您的帮助,谢谢
      • JohnnyB0Y:还可能是苹果的锅,所以先蛋定。 :stuck_out_tongue_closed_eyes:
      • bdb4154cd17e:我也遇见你这个问题, 但是我对照了你的方法, 所有都试过了, 还是不行...我没有用环信
      • 7cfc6cb3d757:😂😂
      • wg689:app delegate.m的分类把app delegate.m 中的didRegisterForRemoteNotificationsWithDeviceToken 方法覆盖了吧?分类会覆盖原来的方法的,微信集成opener 的时候也遇到类似的问题
      • mark666:环信里面也有推送的,你们为什么集成两个,看不懂
        mark666:@iOSfeng 你可以具体看看
        nonooon:@mark666 环信是聊天推送吧
        王隆帅:极光是一期做的,环信是二期做的

      本文标题:iOS JPush + 环信 推送失败

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