写在最前面
各位调试的时候一定要用真机,模拟器是获取不了 token 的
问题一:不能注册
交代下使用的设备:
xcode:Version 8.0 (8A218a)
手机: iphone6(10.0)
jpush版本:2.1.7
iOS10 近期我们 app 要上架,但是在调试的过程中发现了一个问题,ios 10手机不能注册通知了(ios 9的手机可以),我们使用的是极光的2.1.7版本,运行的时候总是报错.
1.did Fail To Register For Remote Notifications With Error:
Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串"
UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}
2. | JPUSH | W - [JPUSHClientController] 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.
看了极光的论坛,推荐解决方案是:升级到xcode8之后,手机为ios10系统,测试时出现警告,打开这个论坛,答案在五楼的一个博客里面.
步骤如下图:
选中 tagets点击 capabilities
然后自动生成如下文件
对应两种状态: development和 production, 然后再运行,即可获取成功获取 token 了
果然问题解决了,可以注册了;
问题二:极光2.1.9版本用 xcode7打包, iOS10接收不到通知问题
交代下使用的设备:
xcode:Version 7.1
手机: iphone6(10.0)
jpush版本:2.1.9
这个问题有两个方案:
- 1.升级 xcode 7成 xcode8,xcode 8按照问题一设置就可以(推荐)
- 2.使用2.1.9以前版本(不推荐,2.1.9以前版本地址)
下面来说下原因:
由于极光2.1.9更新了对 iOS10的支持,会自动识别 iOS10的方法,如果使用 iOS10极光使用的新的UserNotifications框架的,这需要做问题一中的配置才能使用.
所以还是建议升级 Xcode 8;况且 iOS10字体变了, label 可能显示不全,需要 xcode 8 才可以看到字体的变化;可能老板以后想使用 iOS 10 通知新特性;所以说是跑不掉的,升级 Xocde 8吧;
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types = UNAuthorizationOptionAlert|UNAuthorizationOptionBadge|UNAuthorizationOptionSound;
entity.categories =[self setUpCategory];
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
#endif
问题三:提交 app store 审核打包entitlements里面的APS Environment要不要改
由于篇幅比较长,先给出答案:不需要改,xcode 会根据你打包环境的不同,修改成对应的 production 或development;即使你随意改成了任意字符(例如:123
), xcode 也会帮你改回来
交代下使用的设备:
xcode:Version 8.0 (8A218a)
手机: iphone5(9.3)
jpush版本:2.1.7
1. 网上资料:
- 1.网上有很多说这个要改成production
stackOverFlow连接:Post iOS10 / Xcode 8.0 “Missing Push Notification Entitlement” error after build for iTunes Store
- 2.有的说不要改
stackOverFlow连接:xcode 8 push notification capabilities and entitlements file setting
但是这个是饭碗的事情,万一推送不成功,或者苹果拒绝了;所以我得自己亲自试一下.
于是我打了一个 adhoc 的包没有修改APS Environment,还是development
装在手机上,使用生产环境推送;竟然成功了.
2. 验证 ipa 包里面的mobileprovision中的 aps Environment
这里就开始尴尬了,就在想可能会有以下两种可能:
1.使用development也可以,不需要修改成production
2.或者打包的时候,xcode 会帮我改成production
2.1.生产环境
所以我就打开了刚才的 ipa 包,查找里面的mobileprovision文件,过程如下
找到**mobileprovision **文件后;xcode打开啥也没有看到, sublime打开发现一堆乱码;改成 txt 格式还是打不开.
这个时候就蛋疼了,那怎么办;就去搜了下怎么打开 mobileprovision,皇天不负有心人,终于找到一篇文章代码签名探析,里面有打开方案
$ security cms -D -i example.mobileprovision
这个命令会输出签名信息中的内容,如果你亲自试一下,接下来你会得到一个 XML 格式的 plist 文件内容输出。
2.2测试环境
注意:您可以打个普通的开发环境的测试包,终端查看里面的内容,你会发现里面是development
3.注意:如果用户手动去改aps Environment,会怎么样呢?
答:用户不管怎么改都是没有用的,因为 mobileprovision里面又会改回来.
3.1. 测试环境
3.2. Ad Hoc环境
小结
所以可以得出结论:xcode 会自动帮我们改aps Environment对应的value,不用手动改
问题四:使用 xcode自定义推送声音;ios 9 设备可以,但是 ios 10 设备还是使用的系统的声音
- 是否是xcode连接手机覆盖安装了app
- 如果是第一次安装应用,应该是可以收到自定义声音的
- 但是不卸载的情况下,xcode连接手机覆盖安装app,就恢复默认了,这是Xcode的一个bug
iOS自定义声音没了
iOS 如何推送自定义声音
总结
- 建议使用 xcode8来打包适配 iOS10,可以早发现问题早解决
- 推送开关记得要打开;**capabilities **里面
Background Modes-->remote notification
&push notification
- 提交 app store时候entitlements里面的APS Environment不要改,xcode 会帮你修改
写在最后
- 目前我们 app已经在审核了,过几天既可以知道结果了(更新:app已经过Apple 审核了
) - 还没有试下 iOS 10的手机,明天去试下(更新:试了下,是可以的)
- 我会实时更新我的情况,有问题可以回复我哦.
在搜索打开 provison 的时候,搜了好久都没有答案;总结下关键词少点好;
下面是搜索过程