「使用心得」使用 JPush iOS SDK 注意事项

问题汇总
ios
标签: #<Tag:0x00007fb82f74f998> #<Tag:0x00007fb82f74f830>

(jiminy) #1

如果你刚开始集成、使用 JPush iOS SDK,你可能会遇到各种各样的问题,下面是我们整理的一些注意事项,给大家作为参考。


1、

从iOS9系统开始,使用通配证书也能成功获取到Token,但是无法收到推送的通知(APNs);

注:
1、JPush iOS SDK 从2.1.7版本开始,如果当前应用不具备推送功能会打印:PUSH | W - [JPUSHClientController] APNs is not available,please check your provisioning profile and certification
2、iOS9以前的系统会在

  • (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
    方法打印:
    Error Domain=NSCocoaErrorDomain Code=3000 “未找到应用程序的“aps-environment”的权利字符串”

2、

运行安装项目到测试设备,假设你的Provisioning Profile选择自动,如果测试设备是iOS9系统,且本地的Provisioning Profile不含此设备,仍能正常运行安装到测试设备并获取到Token!其实你这时安装的是通配证书的应用,你将无法收到APNs推送;请参考JPush的教程文档配置项目证书:XCode的证书配置教程

注:
JPush iOS SDK 从2.1.7版本开始,如果当前应用不具备推送功能会打印:PUSH | W - [JPUSHClientController] APNs is not available,please check your provisioning profile and certification


3、

从iOS9系统开始,每次卸载安装都会获取到新的Token。如果你没有使用传IDFA的JPush初始化接口,那JPush会认为你当前是一个新的设备,RegistrationId会随之改变,之前设置的tag、alias需要重新设置;


4、

从iOS9系统开始,新安装某个调用apns注册接口且开启Capabilites-Background Modes-Remote notifications选项的应用,弹出[“xxx”想给您发送推送通知]的提示时,无需你否允许,应用都能获取到Token;


5、

JPush没有提供开关推送的接口,但是可以调用apple的注册APNs接口和反注册APNs接口来设置是否有通知提醒!

注:从iOS9.3系统开始,调用代码注册APNs,再调用反注册APNs接口,需要把应用进程杀掉在发起apns,重新开启才能恢复APNs提示;


6、

JPush iOS SDK从2.1.8版本开始支持https,如集成的SDK 版本低于2.1.8,请到xxx-info.plist里面配置下http,否则无法统计通知点击和调用JPUSHService setBadge:<#(NSInteger)#>来上报badge,具体配置看文档:https解决方式


7、

如果你是直接运行安装到测试设备(运行调试状态),那你的安装的应用的证书环境只有可能是开发环境或者通配的。向该设备(RegistrationID)推送开发环境的通知,如果能收到(目标和成功为:1/1),则说明是当前安装的应用是开发环境的证书;如果目标和成功为(0/0),则可能是通配证书。应用证书环境具体以Code Signing配置为准:

8、

如果你想内部测试生产环境的推送,请去apple上面为该appid创建一个AD-Hoc的Provisioning Profile,下载,添加到XCode,Archive项目,export ipa文件,把该ipa拖到iTunes,再同步到测试设备。
导出的时候下图标注的Profile必须是你所创建的AD-Hoc Profile:


9、

第7、8点说到安装应用证书环境的判断依据,那这里再说明下:推送的时候如何指定iOS通知的推送环境。
进入官方控制台的发送通知页面,可通过如下选项指定iOS通知的推送环境:

如果你通过api推送,则需要注意options下面的apns_production字段。官网发送通知的

对应的"apns_production":false和"apns_production":true(推送api文档):

JPush Java SDK 示例代码和注释传送门

iOS Push SDK的初始化接口:
+ (void)setupWithOption:(NSDictionary *)launchingOption
                 appKey:(NSString *)appKey
                channel:(NSString *)channel
       apsForProduction:(BOOL)isProduction;

注:
项目中配置的证书环境决定你的app能收到来自哪个环境的通知(APNs);
初始化接口的isProduction字段需要与你应用配置的证书环境一致。

即:
如果按照第7点的配置证书,isProduction的值应该是false;
如果按照第8点的配置证书,isProduction的值应该是true;
如果发布到App Store,,isProduction的值应该是true。


10、

请不要在初始化应用的方法


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
///
}

里面设置tag、alias和获取registrationID ,如果你在这里设置tag、alias和获取registrationID,你将无法获取到registrationID,设置tag、alias会打印:E - [JPUSHService] app not registed, give up set tag:xxx,alias:xxx

建议如下:

注:想了解集成文档的[五个监听]请戳我
如不知道该如何添加监听,请参考官方 demo的:RootViewController.m;


11、

应用前台运行的时候收到APNs不会有提示(横幅、sound),只会调用apple提供的APNs获取接口:获取 APNs(通知) 推送内容,如果想弹出提示请自己在获取接口里面写代码处理;


12、

后台收到普通APNs,点击icon进入应用并不会触发APNs获取接口,只有点击通知才会触发获取接口;


13、

从JPush下的发iOS自定义消息,只有在前台运行的时候才能收到(不会有apns提示),如果想要获取由JPush 下发的自定义消息,请看:获取自定义消息推送内容

注:如果想了解通知和自定义消息的区别请看:常见问题的通知与自定义消息有什么区别?


14、

建议在AppDelegate.m的applicationWillResignActive方法写代码调整本地的badge显示和重置JPush服务器上面Badge值,示例代码如下:

- (void)applicationWillResignActive:(UIApplication *)application {
  
        [JPUSHService setBadge:0];//重置JPush服务器上面的badge值。如果下次服务端推送badge传"+1",则会在你当时JPush服务器上该设备的badge值的基础上+1;
        
        [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];//apple自己的接口,变更应用本地(icon)的badge值;
}

注:
1)JPush的badge上报接口可根据实际使用场景计算再调用接口上报;
2)应用icon上显示的badge最好在applicationWillResignActive方法里面设为最终计算所得的值。


15、

如果你之前能正常推送iOS通知,忽然所有推送记录的结果都变成了:0/0。这个时候你需要去到JPush控制台,进入该应用的 [应用设置]页面,检查证书的有效期,如果没有过期,则去到apple账号检查该证书是否还在(以appid+有效期来看)

注:无论是上述何种原因,你都需要在apple账号上下载该bundle id的有效APNs证书,添加到本地,导出p12文件,上传到JPush官网

16、

使用XCode8开发,请在Application Target开启以下设置:

如果没有开启此设置,运行安装到非iOS 9系统的设备会打印:

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

注:
如果运行安装的设备是iOS9,可以成功获取到Device Token,但是无法收到推送。


adHoc 在控制台通过别名发送推送能收到,而在我们的服务端转发后没有收不到
更新 SDK2.1.0,开发环境收得到,测试环境收不到,是否与 PushConfig 文件有关?
JPush 环境一致,setAlias 返回 0,收不到推送
JPush 常见问题目录
收不到推送问题咨询
iOS发送推送全平台的时候怎么分开发和生成
为什么我整合极光之后爆了这个错误,是什么原因造成的?网上找了几个方法试了下不管用
iOS开发环境可以收到推送,生产环境收不到
IOS生产证书推送不成功
极光控制台显示推送0|0
ios生产包,收不到推送
企业账号推送发布 ipa 收不到推送,Xcode运行可以收到
ios真机调试收不到后台推送
环境配置正确,生产环境还是收不到推送
手机用的是开发环境。web推送,开发环境的收不到 生产环境的收到了
更改证书后,收不到服务器的通知,极光平台的可以收到
Codorva IOS 9.3生产环境无法收到推送
在生产环境下,可以收到web开发环境推送的通知,接受不到web生产推送的通知
根据别名或者registrationID推送通知,接收不到
极光一直处于生产环境切换不到开发环境
iOS无法接收推送
极光推送成功,但是手机还是收不到apns推送
iOS在网页推送是能收到的,用自己的服务器推送收不到
生产环境getRegistrationID为空
iOS自定义消息只能在前台接收,后台无法接收。
为什么iOS的推送只能发生在应用运行在后台的时候?
iOS9生产环境可以收到推送,iOS8不能
java后台,ios推送程序没有任何反应
iOS API调用 App在后台运行时无横幅效果
ios平台 react-native如何接收应用内消息(自定义消息)
ios推送成功 目标数为0
iOS 开发环境可以推送,生产环境推送无反应
ios9.2系统的6s可以获取到 token,iOS8.1的5s 却获取不到
极光web推送成功,通过后台推送收不到且没有API推送数据
IOS推送目标 为 0
平台发送了推送,app收不到推送
IOS推送,开发环境和生产环境问题
iOS 昨天下午之后收不到通知???????什么鬼
我们这边APP升级了版本之后推送就接收不到了
调用 推送全部消息 安卓可以收到 Ios收不到
ios开发者推送证书是否需要安装
ios上线后收不到推送 提供 Message ID 帮忙查一下 谢谢
iOS每次运行提示证书失败,然而却能正常接收推送
ios 后台推送能收到,API推送收不到
程序前台运行中信息是推送成功能,didReceiveRemoteNotification没有调用?
iOS 生产环境或者开发环境推送不出去
JPushLog ERROR: ack请求超时,断开连接 这是什么错误
设置一次别名后过几分钟再设置空,然后再换个别名就收不到消息了
IOS项目上线时原来的测试环境都需要改什么东西才可以上线
极光后台发送推送手机收不到消息。
极光推送之前可以,不知怎么的突然接不到推送了
切换手机登陆原手机收到推送怎么解决
JAVA 服务端发送消息给 IOS客户端为啥收不到呢 JPUSH是返回成功的哦
在开发环境下收到生产环境的推送
IOS开发环境收不到
iOS 在生产环境下收不到推送、 在开发环境下能够收到, 请问如何解决?
iOS直接用极光推送消息 无论前台还是后台都接收不到消息
角标都收到了,通知没有提示
javaApi推送all平台. iOS生产模式收不到. 使用网页控制台没问题.
ios 生产环境(目标|成功)为(2|2)设备却未收到推送
ios app 在生产环境中收不到消息
iOS 推送生产环境接受不到,开发环境可以
iOS极光推送SDK从2.1.6更新到2.1.7后,收不到推送消息!
Xcode8 beta 6 + iOS10.0 环境, JPush登录不成功, 登录成功(kJPFNetworkDidLoginNotification)通知断点不进入
刚刚集成极光推送,试了试开发环境收不到推送
极光控制台显示推送成功,app收不到推送
将设备tag解除依然能收到使用该tag发送的推送,急急急。。。。。
之前用的1.8 刚刚更新2.1.7 iOS 推送收不到
之前用的1.8 刚刚更新2.1.7 iOS 推送收不到
通过Api推送消息后台显示成功到达目标,可是手机完全没有收到?
同一台设备同一个app应用,在开发环境和生产环境下的 registration_id 是相同的吗?
iOSAdhoc打包收不到后台的通知
推送被登出掉用哪个方法? 我应该看哪个文档
无论初始化的时候选择开发还是正式环境,只有正式能收到消息。
audience 为什么每次注册新的用户它的 都改变,还推送不过去
常见问题 - JPush 合集(持续更新)
控制台不能修改iOS应用环境
无论初始化的时候选择开发还是正式环境,只有正式能收到消息。
常见问题 - JPush 合集(持续更新)
常见问题 - JPush 合集(持续更新)
IOS 为什么区分生产环境开发环境,有什么区别与意义?对安卓有影响吗?
生产环境推送成功 手机一直接收不到通知
关于设备标签的设置问题。
生产环境推送成功 手机一直接收不到通知
为什么web发的消息ios能接收到,但是api推送过来的消息,显示已经发送,但是接收不到,安卓没有问题
生产环境收不到推送,开发环境能收到,控制台也没收到。
如何更好的应用推送
iOS收不到消息,查询情况
xcode 运行的接受不到推送消息,拔掉独立运行的能接收到
更新 Xcode 8 后,iOS 推送成功, 但收不到消息
非iOS9设备获取不了devicetoken
生产环境测试的正确姿势
badge的值的获取?
iOS JPush警告设备令牌不应该更新了多遍
(Javen Fang) #2

(jiminy) #3

(jiminy) #4

(jiminy) #5

(jiminy) #6

#7

1 个帖子被分离到了新主题:如何在退出登录后收不到消息,登录后再收到