前言:
最近在使用JPush进行极光推送。Unity插件GitHub地址https://github.com/jpush/jpush-unity3d-plugin
问题描述:
但是发现了一个问题,按照官方文档操作,最终仍然无法获取DeviceToken,检查了多次,集成了多次,仍然无法获取一直报
问题定位:
出现Not get deviceToken yet. Maybe: your certificate not configured APNs?...错误日志时如何排除问题?
如果出现上述日志,则说明一段时间内都无法获取device token,那么:
- 确认你的app配置了apns权限,如果未配置apns权限,则应该会出现此错误提示。
- 确认你的app运行在ios真机而非模拟器上,且通知中心中对应app的通知权限没有完全关闭(alert/sound/badge至少有一个权限是打开的)。
-
确认你的网络状况,与apple的服务器的连接是通过tcp的 5223端口连接,确认你网络的对应端口是否可用,可通过下列命令来确认这点:
telnet 1-courier.push.apple.com 5223
-
在代码中可在以下两个函数中断点以确认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的调用:
[JPUSHService registerDeviceToken:deviceToken];
-
如果以上两个registerRemoteNotification的函数都未进入, 请确认你的代码中有注册申请apns的函数调用:
[JPUSHService registerForRemoteNotificationTypes:];
-
如果上述情况都已确认且未进入第4步的任意回调函数,则可以判断无法获取token的原因在于设备与apple的网络连通性问题(注:一个设备只有在未申请过token的情况下才会需要与apple的网络交互来获取token,已经获取过某一环境token的设备在无网络的情况下也能获取到对应环境的token(环境分为 开发/生产)),这种情况下切换网络能够在大部分情况下解决此问题。
-
如果仍然有问题,请将上述步骤的结果以邮件附件的形式发送到JPush支持邮箱,我们将协助你解决此问题。