iOS10推送适配常见问题

写在最前面

各位调试的时候必定要用真机,模拟器是获取不了 token 的ios

问题一:不能注册

交代下使用的设备:
xcode:Version 8.0 (8A218a)
手机: iphone6(10.0)
jpush版本:2.1.7git

iOS10 近期咱们 app 要上架,可是在调试的过程当中发现了一个问题,ios 10手机不能注册通知了(ios 9的手机能够),咱们使用的是极光的2.1.7版本,运行的时候老是报错.github

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系统,测试时出现警告,打开这个论坛,答案在五楼的一个简书博客里面.xcode

步骤以下图:

选中 tagets点击 capabilitiesapp

Snip20161011_1.png框架

而后自动生成以下文件iphone

Snip20161011_4.pngpost

对应两种状态: 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

APS Environment

1. 网上资料:

Paste_Image.png

  • 2.有的说不要改

stackOverFlow链接:xcode 8 push notification capabilities and entitlements file setting

Paste_Image.png

可是这个是饭碗的事情,万一推送不成功,或者苹果拒绝了;因此我得本身亲自试一下.
因而我打了一个 adhoc 的包没有修改APS Environment,仍是development
装在手机上,使用生产环境推送;居然成功了.

2. 验证 ipa 包里面的mobileprovision中的 aps Environment

这里就开始尴尬了,就在想可能会有如下两种可能:
1.使用development也能够,不须要修改为production
2.或者打包的时候,xcode 会帮我改为production

2.1.生产环境

因此我就打开了刚才的 ipa 包,查找里面的mobileprovision文件,过程以下

Snip20160929_20.png

Snip20160929_21.png

找到mobileprovision 文件后;xcode打开啥也没有看到, sublime打开发现一堆乱码;改为 txt 格式仍是打不开.

sublime打开

这个时候就蛋疼了,那怎么办;就去搜了下怎么打开 mobileprovision,皇天不负有心人,终于找到一篇文章代码签名探析,里面有打开方案

$ security cms -D -i example.mobileprovision
这个命令会输出签名信息中的内容,若是你亲自试一下,接下来你会获得一个 XML 格式的 plist 文件内容输出。

Snip20160930_29.png

Paste_Image.png

2.2测试环境

注意:您能够打个普通的开发环境的测试包,终端查看里面的内容,你会发现里面是development

Paste_Image.png

3.注意:若是用户手动去改aps Environment,会怎么样呢?

答:用户无论怎么改都是没有用的,由于 mobileprovision里面又会改回来.

3.1. 测试环境

Snip20160930_6.png

Paste_Image.png

3.2. Ad Hoc环境

Snip20160930_9.png

Snip20160930_8.png

小结

因此能够得出结论:xcode 会自动帮咱们改aps Environment对应的value,不用手动改

问题四:使用 xcode自定义推送声音;ios 9 设备能够,可是 ios 10 设备仍是使用的系统的声音

  • 是不是xcode链接手机覆盖安装了app
  • 若是是第一次安装应用,应该是能够收到自定义声音的
  • 可是不卸载的状况下,xcode链接手机覆盖安装app,就恢复默认了,这是Xcode的一个bug

iOS自定义声音没了
iOS 如何推送自定义声音

总结

  1. 建议使用 xcode8来打包适配 iOS10,能够早发现问题早解决
  2. 推送开关记得要打开;capabilities 里面Background Modes-->remote notification&push notification
  3. 提交 app store时候entitlements里面的APS Environment不要改,xcode 会帮你修改

写在最后

  1. 目前咱们 app已经在审核了,过几天既能够知道结果了(更新:app已通过Apple 审核了
    )
  2. 尚未试下 iOS 10的手机,明天去试下(更新:试了下,是能够的)
  3. 我会实时更新个人状况,有问题能够回复我哦.

在搜索打开 provison 的时候,搜了很久都没有答案;总结下关键词少点好;
下面是搜索过程

Snip20160930_25.png

Snip20160930_27.png

Snip20160930_24.png

相关文章
相关标签/搜索