JPUSH bug汇总

1. 服务端Options 参数中的apns_production 没有设置对应的生产环境
    致使测试的时候能够顺利推送  可是上线以后推送功能失效

2.咱们在作推送的时候须要关心的一些问题
关键绩效指标(KPI:Key Performance Indicator)
   新增用户、活跃用户、启动次数
这些指标是KPI的主 要评估标准;关注这些指标的每日趋势,您能够了解到应用天天发展是否正常、是否符合预期。
    留存用户、留存率、流失用户

1. 通知能够在app关闭的状况下收到,而消息只能当应用打开(Android)甚至仅在前台(iOS)时,才会收到。

3.定时发送推送
要用到

API Push Schedule (修改了HTTP协议头)

http://docs.jpush.io/server/rest_api_push_schedule/
  1. AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];  
  2. manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModeNone];  
  3. manager.requestSerializer = [AFJSONRequestSerializer serializer];  
  4. manager.responseSerializer = [AFJSONResponseSerializer serializer];  
  5. [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];  
  6. [manager.requestSerializer setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];   

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

请确保:java

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

舒适提示:目前V3 api推送能够经过参数apns_production来指定推送环境:false为开发环境,true为生产环境。V3 api不带此参数则默认为生产环境,V3 api封装的sdk 默认为开发环境。ios

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

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

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。api

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

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

获取 APNs 推送内容服务器

如何关闭 APN  推送?

关闭推送有如下两种方式关闭:网络

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

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

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

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

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

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:];

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

7.若是仍然有问题,请将上述步骤的结果以邮件附件的形式发送到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不一致。

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

为何日志里面会打印: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.

这个主要是提示开发者若是要支持UIBackgroundModes,须要开启Remote notifications,具体操做能够看:iOS 7 Background Remote Notification



4.有一点须要注意若是不经过后台链接极光推送,极光推送的PushConfig文件不须要配置也能够推送成功;

5.获取用户停留在某个页面的时间

应在全部的须要统计得页面得 viewWillAppear 和 viewWillDisappear 加入 startLogPageView 和 stopLogPageView 来统计当前页面的停留时间。



相关文章
相关标签/搜索