zoukankan      html  css  js  c++  java
  • JPush 极光推送 iOS常见问题

    JPush 极光推送 iOS常见问题

    为什么日志里面会打印:You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.

    iOS 7在推送方面最大的变化就是允许,应用收到通知后在后台(background)状态下运行一段代码,可用于从服务器获取内容更新。功能使用场景:(多媒体)聊天,Email更新,基于通知的订阅内容同步等功能,提升了终端用户的体验

    这个主要是提示开发者如果要支持UIBackgroundModes,需要开启Remote notifications,具体操作:

    客户端设置

    需要在Xcode 中修改应用的 Capabilities 开启Remote notifications,请参考下图:

    在Info.plist里添加Required background modes数组

    修改通知处理函数

    当注册了Backgroud Modes -> Remote notifications 后,notification 处理函数一律切换到下面函数,后台推送代码也在此函数中调用。

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;

     为什么集成成功后iOS收不到推送通知?

    请确保:

    • 推送的key和应用集成的key是同一个;
    • iOS应用程序的证书和你上传到JPush Portal上上传的证书是同一个;
    • 推送时指定的iOS推送环境和应用证书是同一个环境。

    温馨提示:目前V3 api推送可以通过参数apns_production来指定推送环境:false为开发环境,true为生产环境。V3 api不带此参数则默认为生产环境,V3 api封装的sdk 默认为开发环境。

     为什么启动的时候出现 Did Fail To Register For Remote Notifications With Error的错误

    程序运行的时候出现下面的错误信息:

    did Fail To Register For Remote Notifications With Error: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串" UserInfo=0x1c55e000 {NSLocalizedDescription=未找到应用程序的“aps-environment”的权利字符串}

    这个是由于你的Provisioning Profile文件,不具备APNS功能导致的。请登陆Apple Developer 网站设置好证书,更新Provisioning Profile,重新导入Xcode。

    或参考:http://blog.csdn.net/stefzeus/article/details/7418552

    如何关闭 APN  推送?

    关闭推送有以下两种方式关闭:

    1.在iOS系统设置的通知设置中更改对应app的推送设置(推荐);

    2.在代码中调用 [[UIApplication sharedApplication] unregisterForRemoteNotifications];

    对应以上关闭方式的重新打开推送方法:

    1.在iOS系统设置的通知设置中修改对应app的推送设置;

    2.在代码中重新调用 [APService registerForRemoteNotificationTypes:];

    如何在接收到 APN 的时候获取 APN 消息内容并进行跳转或做出响应处理?

    获取 APNs 推送内容 http://docs.jpush.cn/pages/viewpage.action?pageId=4259879

    App badge number(角标)如何更改与清空?

    JPush 网站上推送 iOS 通知时,可选设置里面有选项可以指定 badge 的参数的值,如:1或"+1"。

    api上指定badge的参数请看:Push-API-v3#API-v3-ios,客户端上报badge到JPush服务器的接口请看:设置badge

    Icon Badge number 的清空方法:

    1. APN 推送内容指定 badge number 为 0;
    2. 在代码中使用如下代码清空 badge number:  [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

    注意:badge累加只能通过v3api推送,且只有1.7.4版本以上才能支持。

    为何推送一条 APN 后,点击通知中心的 APN 通知打开 App,可是 APN 通知在通知中心依然存在而未被删除?

    如果推送 APN 时,Badge number 被指定为0 ,则可能出现 APN 消息在通知中心被点击后,尽管调用了   [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 但 APN 消息在通知中心不会被删除的情况。 这种情况可以按如下代码调用以清除通知中心的 APN 通知。

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

    如果仍有其他消息,则考虑清除 local notification 通知。( [[UIApplication sharedApplication] cancelAllLocalNotifications] )

    出现Not get deviceToken yet. Maybe: your certificate not configured APNs?...错误日志时如何排除问题?

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

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

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

    3.确认info.plist上的BundleID是否和上传到JPush官网的p12证书的BundleID一致,BuildSetting里面的Provision Profile是否属于JPush官网上显示的BundleID,CodeSigning选择的证书是否from你所选择的Provision Profile的证书。

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

    telnet 1-courier.push.apple.com 5223

    5.在代码中可在以下两个函数中断点以确认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];

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

    [APService registerForRemoteNotificationTypes:];

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

    8.如果仍然有问题,请将上述步骤的结果以邮件附件的形式发送到JPush支持邮箱,我们将协助你解决此问题。

    上传到appStore的版本为什么收不到推送?

    1.请确认xcode选择的生产证书和上传的证书的bundleid一致;

    2. 如果是在jpush网站上推送,请确认新建通知时推送对象是否选择了生产环境,如图:

    3.如果使用了V2 api 的apns_production参数,值是否为:1;如果使用了V3 api 的apns_production参数,值是否为:true。

    iOS 平台上传证书一直为未通过状态

    证书上传未通过的原因一般有:

    1.当前上传的p12证书密码输入有误;

    2. 证书导出的时候展开了证书,把个人私钥导了出来,导证书的时候请不要展开证书;

    3.当前上传的证书环境不对,如:在上传开发证书的地方上传了生产证书;

    4.该证书已在本账号的其它应用使用;

    5.现上传的证书与当前应用已上传成功的证书的bundle id不一致。

    具体请看上传后显示的错误输出内容。

    参考于    http://docs.jpush.cn/pages/viewpage.action?pageId=7864782

  • 相关阅读:
    【学习笔记 2】单调队列 & 单调栈
    【学习笔记 1】快速幂
    题解P1151
    题解 P6161【[Cnoi2020]高维】
    不知道叫啥的题目1
    神秘题目1
    5.30 模拟赛赛后总结
    矩阵乘法加速图上问题专题总结
    点分治&点分树 复习
    5.26赛后总结
  • 原文地址:https://www.cnblogs.com/OrangesChen/p/5041787.html
Copyright © 2011-2022 走看看