在iOS上使用GCM获取"未知令牌"

Mak*_*sim 5 iphone apple-push-notifications ios google-cloud-messaging

我已经在iOS应用程序中安装了GCM,并且在开发中一切正常,我很高兴获得推送通知.但是当我将它发布到应用程序商店时,设备上没有推送通知(在Android中正常工作).

PersistentConnectionLogging.mobileconfig在我的iOS设备上安装了文件以查看日志,这是我看到的:

收到主题的传入推送通知:com.bundle.id但是对于完全未知的令牌XYZ

这是确切的输出消息

Jun 24 11:45:35 iPhone apsd[103] <Notice>: 2016-06-24 11:45:35 -0700 apsd[103]: Received incoming push notification for topic: com.bundle.id but for a completely unknown token <95af08c3 c74a13bf 6b6fb270 c486f2b3 58989f44 dfe69bc0f 95u410e1 2431b8dc>
Jun 24 11:45:35 iPhone apsd[103] <Notice>: 2016-06-24 11:45:35 -0700 apsd[103]: <APSCourier: 0x137d035e0>: Responding with REMOVED status for message received with topic: 'com.bundle.id' to device token (instead of per-app token)
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?为什么令牌"未知"?那么它属于谁呢?

tym*_*mac 1

您是否尝试过测试您的推送认证GitHub 上的Houston通常用于证书测试。基本上,如果推送不适用于第三方,那么您需要重新创建证书。

在 CLI 中使用 Houston:

apn push "<5e8f5cc0 be283f88 cc4ebb7d b6091499 80f51631 5ebf4928 b59a2a62 198d20d0>" -c -out "apple_push_notification.pem" -m "Hello from the command line!"

*休斯顿说,* 我们建议您上传开发证书、生产证书和任何临时证书。层将自动确定使用哪个证书。

其他潜在原因:

  • 您拨打的电话正确吗[layerClient updateRemoteNotificationDeviceToken...]

  • 您是否正在向内部调用didRegisterForRemoteNotificationsWithDeviceToken以向 Layer 发送设备令牌?

您还可以通过实施来检查应用程序是否无法注册didFailToRegisterForRemoteNotificationsWithError。如果您查看错误,您应该能够找出为什么没有看到推送。

Obj-C 错误检查示例

- (void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"PUSH ERROR: %@", error);
}
Run Code Online (Sandbox Code Playgroud)

Swift 错误检查示例

func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError!) {
print("PUSH ERROR: \(error)")
}
Run Code Online (Sandbox Code Playgroud)

潜在的 Xcode/证书问题原因:

  • 配置文件不是最新的。设备信息存储在证书中,因此每当您将新设备添加到配置文件时,您都需要重新创建配置文件和证书。
  • 确保您的 XCode 项目设置指向正确的证书和配置文件。
  • 当进入钥匙串访问应用程序时,请确保您正在导出密钥和证书。