在 iOS 上使用 GCM 获取 'unknown token'
Getting 'unknown token' using GCM on iOS
我已经在 iOS 应用程序中安装了 GCM,并且在开发中一切正常,我很高兴收到推送通知。但是当我将它发布到应用商店时,设备上没有推送通知(在 Android 中工作正常)。
我在我的 iOS 设备上安装了 PersistentConnectionLogging.mobileconfig
文件以查看日志,这是我看到的:
Received incoming push notification for topic: com.bundle.id but for a
completely unknown token 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)
知道为什么会这样吗?为什么令牌是"unknown"?那它属于谁呢?
您是否尝试过测试您的推送认证? Houston on GitHub 通常用于证书测试。基本上,如果推送不适用于第三方,那么您将需要重新创建证书。
在 CLI 中使用 Houston:
apn push "<5e8f5cc0 be283f88 cc4ebb7d b6091499 80f51631 5ebf4928 b59a2a62 198d20d0>" -c -out "apple_push_notification.pem" -m "Hello from the command line!"
*休斯顿说,*
我们建议您上传开发证书、生产证书和任何临时证书。 Layer 将自动确定要使用的证书。
其他潜在原因:
您是否正确调用 [layerClient updateRemoteNotificationDeviceToken...]
?
您是否在内部调用 didRegisterForRemoteNotificationsWithDeviceToken
向 Layer 发送设备令牌?
您还可以通过实施 didFailToRegisterForRemoteNotificationsWithError
检查应用是否注册失败。如果您查看错误,您应该能够弄清楚为什么看不到推送。
示例 Obj-C 错误检查:
- (void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"PUSH ERROR: %@", error);
}
示例Swift错误检查:
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError!) {
print("PUSH ERROR: \(error)")
}
潜在的 Xcode/Certificate 问题原因:
- 配置文件不是最新的。设备信息存储在证书中,因此每次您将新设备添加到配置文件时,您都需要重新创建配置文件和证书。
- 确保您的 XCode 项目设置指向正确的证书和配置文件。
- 在 Keychain Access 应用程序内部时,请确保您正在导出密钥和证书。
iOS应用程序提供两种类型的证书,一种用于开发模式,一种用于生产模式。如果您使用的是开发证书,则创建的令牌是开发令牌,它不适用于生产模式。您必须使用生产证书并创建生产令牌。
我已经在 iOS 应用程序中安装了 GCM,并且在开发中一切正常,我很高兴收到推送通知。但是当我将它发布到应用商店时,设备上没有推送通知(在 Android 中工作正常)。
我在我的 iOS 设备上安装了 PersistentConnectionLogging.mobileconfig
文件以查看日志,这是我看到的:
Received incoming push notification for topic: com.bundle.id but for a completely unknown token 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)
知道为什么会这样吗?为什么令牌是"unknown"?那它属于谁呢?
您是否尝试过测试您的推送认证? Houston on GitHub 通常用于证书测试。基本上,如果推送不适用于第三方,那么您将需要重新创建证书。
在 CLI 中使用 Houston:
apn push "<5e8f5cc0 be283f88 cc4ebb7d b6091499 80f51631 5ebf4928 b59a2a62 198d20d0>" -c -out "apple_push_notification.pem" -m "Hello from the command line!"
*休斯顿说,* 我们建议您上传开发证书、生产证书和任何临时证书。 Layer 将自动确定要使用的证书。
其他潜在原因:
您是否正确调用
[layerClient updateRemoteNotificationDeviceToken...]
?您是否在内部调用
didRegisterForRemoteNotificationsWithDeviceToken
向 Layer 发送设备令牌?
您还可以通过实施 didFailToRegisterForRemoteNotificationsWithError
检查应用是否注册失败。如果您查看错误,您应该能够弄清楚为什么看不到推送。
示例 Obj-C 错误检查:
- (void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"PUSH ERROR: %@", error);
}
示例Swift错误检查:
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError!) {
print("PUSH ERROR: \(error)")
}
潜在的 Xcode/Certificate 问题原因:
- 配置文件不是最新的。设备信息存储在证书中,因此每次您将新设备添加到配置文件时,您都需要重新创建配置文件和证书。
- 确保您的 XCode 项目设置指向正确的证书和配置文件。
- 在 Keychain Access 应用程序内部时,请确保您正在导出密钥和证书。
iOS应用程序提供两种类型的证书,一种用于开发模式,一种用于生产模式。如果您使用的是开发证书,则创建的令牌是开发令牌,它不适用于生产模式。您必须使用生产证书并创建生产令牌。