美文网首页iOS开发实录iOS开发文集iOS开发攻城狮的集散地
极光推送开发环境可以收到,生产环境收不到推送 (爬坑笔记)

极光推送开发环境可以收到,生产环境收不到推送 (爬坑笔记)

作者: iOS_Gato_老猫 | 来源:发表于2016-12-01 16:36 被阅读12273次

    极光推送开发环境可以收到,生产环境收不到推送

    首先阐述一下我遇到的问题

    我们项目连通了极光推送,以前写过的项目也是这样 在开发环境下测试 好使了  但是打包ADHoc时候 就不好使了,当时也没在意  因为网上好多人说 只要测试好使了 证书显示配置成功了(绿灯)  那就没问题了

    so 上线 然后上线以后 发现推送功能完全不好使!这就尴尬了 赶紧下架

    因为我们项目使用的是别名推送

    使用极光网站推送时候 我使用了广播,别名推送,regID推送,结果 都能收到(开发环境)

    然后我在生产环境 再次发送 广播,别名,regID

    结果 很显然 别名收不到 这就纠结了 开始查看问题吧

    经过两天的爬坑,终于找到了问题所在  也正在积极解决

    在这里再次感谢极光官方两位大牛,如果没有你们的帮忙 我想我还会纠结好久    Lris12     Helperhaps 

    好了 废话少说 阐述问题跟代码

    ————————我是分割线———————————

    初次发现这个问题的时候 首先排查的就是证书配置

    这里再次建议大家好好仔细的看看开发文档,因为很多错误都是细节处不注意造成的,

    https://docs.jiguang.cn/jpush/client/iOS/ios_sdk/

    附上开发文档地址。

    因为这个项目是接手别人已经做得差不多的 我就负责收尾  所以 证书这方面我会优先查看 是否错误,

    developer.apple.com 中 我已经看到

    很明显  开发环境的证书跟生产环境的证书 都已经配置完成,

    那么证书是没有问题的 下面我们看看极光官网的配置

    也是已验证,

    这就奇怪了  到这 我表示 可能是代码出错了 好吧 我们来看代码。

    别名设置 相信在官方文档中大家都明白怎么写

    反复查看文档  我发现并没有任何问题这么写。

    经过跟  Lris12 大神的交流

    觉得很可能是因为网络原因 在注册极光还没有返回成功的时候 就绑定别名 导致 regID跟别名没有绑定成功

    解决方法:添加5个监听,在监听到extern NSString * const kJPFNetworkDidLoginNotification; // 登录成功之后再设置别名

    https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/#jpush-sdk1

    Ps。这里强烈建议这么写,安全第一 安全第一!!!!

    这里附上代码

    ```

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

    {

    NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];

    [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidLoginNotification object:nil];

    [JPUSHService registerDeviceToken:deviceToken];

    }

    //通知方法

    - (void)networkDidReceiveMessage:(NSNotification *)notification {

    [JPUSHService setTags:nil aliasInbackground:[OpenUDID value]];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

    [JPUSHService setTags:nil alias:[OpenUDID value] fetchCompletionHandle:^(int iResCode, NSSet *iTags, NSString *iAlias)

    {

    }];

    });

    //注销通知

    [[NSNotificationCenter defaultCenter] removeObserver:self name:kJPFNetworkDidLoginNotification object:nil];

    }

    ```

    然而 问题依旧没有解决,但是这个时候 我们登录极光官网推送

    我在生产环境 再次发送 广播,别名,regID

    结果  都收到了!!

    正当我高兴的时候  发现 api推送依旧收不到!!收不到!!

    绝望!!

    继续排查

    按照开发文档 设置xcode配置, 嗯 依旧没用

    这里我重点说一下 :iOS9 之后 卸载重装后会改变token,所以registrationID会改变,如果你没有用到idfa

    如果你的项目使用的是regID推送 那么你要注意 每次更新app 新用户下载app  重新下载app等一系列状况下 regID改变的问题

    还有如果注册成功后 会返回 设置成功,有callback为0

    这个也要注意下

    好 回归正题,

    这时候时间已经过去一天半了, 最后我觉得 我所有的代码 配置 证书 环境 都没有问题!

    再去极光官网看看 到底咋回事

    好吗 这一看 终于发现了问题所在!

    大家看没看到 这里写的是 推送平台  iOS-dev?

    卧槽!!后台给我推送的居然是 开发环境!!

    果断找后台理论!!!

    Lris大神告诉我

    「发布版本后无法有效推送」 or 「生产环境下收不到消息」 按以下步骤排查问题: 客户端 客户端是否打包证书 检查当前环境是否正确 设备里面的手机应用有没有 添加/配置 这个tag/ 别名 服务端注意改变环境参数,option的apns_production的值(true:生产)(false开发)。根据客户端环境改变服务端推送环境。环境要一致才能收到推送。

    然后我们后台给我发送了一段代码 堵住了我的嘴

    $platform = 'android,ios' ;

    $msg_content = json_encode(array('n_builder_id'=>0, 'n_title'=>$n_title, 'n_content'=>$n_content,'content-available'=>1,'apns_production'=>1));

    $obj = new jpush($masterSecret,$appkeys);

    我标红的位置 人家已经设置了1 为什么还不好用?

    经过Helperhaps 大神的解释 好吧 我懂了

    我们后台使用的 过期的V2 api

    特别提示:建议不要在客户端里写代码直接调用此 API。因为 Android apk 比较容易破解,别人很容易从客户端代码里找出来调用 JPush Remote API 所需要的保密信息,从而可以模拟到你的身份来发起恶意的推送。

    建议的使用方式是:调用 JPush Remote API 的代码放在你自己的应用服务器上。你自己的应用服务器对自己的客户端提供接口来推送消息。具体请参考推聊的作法:示例与代码。

    升级到 v3 Push API:建议开发者升级到 v3 版本。此版本会继续支持到 2015 年。

    至此  这个问题才算是解决(至少对前端来说)

    第一次发这样的帖子感觉有点乱 嗯。。。

    下次大家在推送上有问题的话。。先看开发文档走一遍流程 然后看看极光个人推送 广播能否收到 然后就可以考虑跟服务端干一仗了!!

    最后祝大家 永无BUG!!!!!!!!!!!!!

    相关文章

      网友评论

      • Arthur澪:你好,开发环境下。极光后台发的通知能够收到,但是我们的后台发的收不到,这是什么原因
        Arthur澪:@Gato_M 是后台问题······让我瞎搞了2天
        iOS_Gato_老猫:@Arthur凌 你好,出现这种情况 首先要确定后台使用的SDK版本是不是最新的
        然后 在后台控制 发送推送的字段 是 开发环境 还是生产环境
        如果这些都没问题
        那就最好重新核对一下 后台的appkey。是否正确了
        一般出现这种状况 前端应该是没有问题的了
      • 陈江红:我使用的是证书副本,开发环境没有问题,正式环境一直收不到通知,是因为是副本的原因吗
        iOS_Gato_老猫:@陈江红 首先需要确定问题
        可能会导致这种情况的发生
        1.证书错误。-查看appDeve 证书是否是绿色灯状态
        2.查看极光推送 生产环境证书是否认证通过
        3.测试生产环境时一定要adhoc打包才能测试 其他方式打包安装不行
        4.如果一切都没问题 那么建议 删除生产证书。重新申请并且上传极光
      • 沐浴汐:我自己在官网能能推送到手机,但是就是接受不到后台的信息,大神怎么办啊
        iOS_Gato_老猫:@沐熙熙 这种情况可性能很多
        首先你要确定 你在极光官网上发布的推送 是什么模式下
        大多数都是因为这个原因

        发送推送模式分 开发模式 生产模式
        额 最近没有登录回复的很晚 不知道能不能帮到你
      • 小强神坑之神也:我的能收到后台的推送消息,但是到了下午不知怎么的就一直收不到了,是推送次数有限制吗
        iOS_Gato_老猫:@Roader 你理解错了,生产环境跟开发环境 都是可以测试的
        开发环境测试方法
        1.实用XCode直接安装到手机 进行推送
        开发环境测试方法
        1.使用XCode 进行打包,ADHoc打包成ipa后 用itunes安装后 就是生产环境了!
        Roader:楼主我第一次做推送,用的极光,想请教一下,如果应用还没有通过审核上架到APP STORE,用生产环境是推送不了的对吗?我现在在极光后台用开发环境是可以推送过来的,但是用公司的管理后台和极光后台的生产环境都推不过来。
        iOS_Gato_老猫:@d2f81bcc7767 一般情况测试次数你是不会用完的,你看看极光推送记录吧 应该会看到问题
      • Locaus_Joe:简直了,大赞
        iOS_Gato_老猫:@Locaus_Joe 多谢
      • ab08779e640a:握草,这个问题搞了3 4天了,证书配置了好几次,打包上线好几次,就是不行,貌似就是这个问题,WTF
        iOS_Gato_老猫:@田大壮 解决了就好
      • 草莓2020: 极光上看到后台推动的是iOS-dev 生产环境收不到通知是后台的问题吗
        iOS_Gato_老猫:@sunshine0050 后台需要更改推送设置 控制推送环境,前端如果证书配置没问题,就不用管
        草莓2020:@Gato_M 这个是后台推送设置的问题吗
        iOS_Gato_老猫:@sunshine0050 iOS-dev 是开发环境 不是生产环境哦 亲
      • 孤独感爆棚:有个问题就是,你这个OpenUDID是那来的?我们是登陆用户的UUID,所以这里有个问题,通知返回时可能用户还没登陆,所以UUID为空,设置别名无效。
        iOS_Gato_老猫:OpenUDID 是一款类似设备标示的第三方 返回唯一切不会随意改变的16或者32位字符串 可以当作UDID使用
      • 沉默的鱼sunny:极光推送测试环境可以收到推送,是不是配置生产文件就可以上传App Store了,还需要在Code Signing Identity中选择吗
        iOS_Gato_老猫:理论上 没问题了,但是个人建议 你还是 打包 ADHoc 测试一下 生产环境推送 上线的项目多了 我也偶尔会掉进收到不到推送的坑 就不如写这篇文章之前。。所以 没有尝试过永远别说没问题!
      • 极小光:你好朋友,感谢您对极光的支持,我们现在有一个活动,只要写极光有关的文章,就可以获得奖品,您可以把这篇文章稍微修改一下,然后投到极光社区。我们的工作人员会联系您的,再次感谢。https://community.jiguang.cn/t/filco/11374
        极小光:@Gato_M 因为是征文,所以具体内容我不便说
        iOS_Gato_老猫:@极小光 稍微修改一下 指的是那里?
      • iOS程序员asdf:楼主写的很好,很受教
      • 饥人谷_张炜:楼主写的很好, 楼主我要和你一站, 帮帮忙啊.. 我现在的情况是xcode运行的真机可以再极光官网上推送开发模式和生产模式, 但是app在打包了蒲公英 在极光官网上推生产模式也收的到. 但是我们后台给我推的时候 我xcode上运行的真机才能收到. 而蒲公英打包的一直都收不到 什么问题啊~
        iOS_Gato_老猫:@麒麟阁饿了 你可以去激光推送网站看看 后台推送的应该是iOS dev模式也就是开发环境 你打包用adhoc 就表示需要生产环境推送

      本文标题:极光推送开发环境可以收到,生产环境收不到推送 (爬坑笔记)

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