设备令牌在开发中注册良好,但不是生产

Posted

技术标签:

【中文标题】设备令牌在开发中注册良好,但不是生产【英文标题】:Device Token registering fine in development, but not production 【发布时间】:2012-09-10 20:29:15 【问题描述】:

我正在为 iosandroid 创建一个 PhoneGap 应用程序。我已经让 Android 工作得很好,但是在 iOS 中从开发切换到生产时遇到了麻烦。没有为具有生产 adHoc 构建的设备注册设备令牌。我已经用尽了我能想到的一切。这是我到目前为止所做的:

    删除了我计算机上的所有证书和配置文件以尝试重新开始。 在我的应用程序特定应用程序 ID(不是通配符应用程序 ID)上启用生产 APNS 并将其导入我的钥匙串。 使用生产 ssl 证书和正确的应用程序 ID 为 adHoc 分发创建了新的生产配置文件。检查以确保在配置文件中设置了 aps-environment。 导入了新的配置文件并将应用程序设置为在我的项目和目标的构建设置中使用正确的配置文件。 已导出 p12 文件以导入 UA。 在 UA 集上删除并创建了一个新应用程序以供生产使用。上传 p12 文件并开启 Push Debug 模式。 确保 AirshipConfig.plist 具有正确的生产密钥并将 APP_STORE_OR_AD_HOC_BUILD 设置为 YES。 存档应用并将其导出以进行临时分发,并通过 iTunes 将其加载到手机上。

当我第一次在设备上运行应用程序时,一切都已完全重做。这是我在控制台中得到的:

Mon Sep 17 12:48:00 unknown XXXXXXXXX[5039] Warning: Multi-tasking - Device: NO, App: YES

Mon Sep 17 12:48:05 unknown XXXXXXXXX[5039] Warning: Reachability Flag Status: -R -----l- networkStatusForFlags
Mon Sep 17 12:48:06 unknown XXXXXXXXX[5039] Warning: [M] = -[UAPush updateRegistration] [Line 583] Checking registration state
Mon Sep 17 12:48:06 unknown XXXXXXXXX[5039] Warning: [M] = -[UAUser listenForDeviceTokenReg] [Line 969] ListenForDeviceTokenReg
Mon Sep 17 12:48:06 unknown XXXXXXXXX[5039] Warning: [M] = -[UAUser retrieveRequestSucceeded:] [Line 911] User retrieved: 200:
"user_id" : "XX-XXXXXXXXXXXXXXXXX",
"user_url" : "https://device-api.urbanairship.com/api/user/XX-XXXXXXXXXXXXXXXXX/",
"tags" : [ ],
"device_tokens" : [ ],
"device_pins" : [ ],
"apids" : [ ],
"has_active_subscription" : false,
"subscriptions" : [ ],
"ua_device_ids" : [ "XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" ],
"badge" : 0,
"server_time" : "2012-09-17 17:48:02"

Mon Sep 17 12:48:06 unknown XXXXXXXXX[5039] Warning: [M] = -[UAUser updateDefaultDeviceToken] [Line 1016] Updating device token
Mon Sep 17 12:48:06 unknown XXXXXXXXX[5039] Warning: [M] = -[UAUser updateDefaultDeviceToken] [Line 1021] Skipping device token update: no token, already up to date, or user is being updated.

Mon Sep 17 12:48:21 unknown XXXXXXXXX[5039] Warning: [M] = +[UAKeychainUtils getDeviceID] [Line 269] Retrieved device id info from keychain.
Mon Sep 17 12:48:21 unknown XXXXXXXXX[5039] Warning: [M] = +[UAKeychainUtils getDeviceID] [Line 273] Device ID result is not nil.
Mon Sep 17 12:48:21 unknown XXXXXXXXX[5039] Warning: [M] = +[UAKeychainUtils getDeviceID] [Line 282] Loaded Device ID: XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Mon Sep 17 12:48:21 unknown XXXXXXXXX[5039] Warning: [M] = +[UAKeychainUtils getDeviceID] [Line 283] Loaded Model Name: iPhone1,2
Mon Sep 17 12:48:21 unknown XXXXXXXXX[5039] Warning: [M] = -[UAAnalytics requestDidSucceed:response:responseData:] [Line 467] Analytics data sent successfully. Status: 200

我删除了 ID 号和应用名称。

“跳过设备令牌更新:没有令牌,已经是最新的,或者正在更新用户”上方的这条消息。我觉得很奇怪。这是一个新创建的 UA 应用程序,具有新的密钥和一切。我还用我的开发配置文件、密钥和所有内容加载了它,它工作得很好。它只是不在生产运行中注册设备令牌。

感谢任何帮助。我检查了所有设置,据我所知,我的所有配置文件、密钥、权利都设置正确。我在 WiFi 上运行,因为我使用的手机只是一部没有有效运营商服务的测试手机。

【问题讨论】:

【参考方案1】:

我认为,我现在已经两次解决了这个问题,虽然我不能 100% 确定核心问题是什么 - 我认为你如何测试它存在问题。

尝试让 UA Push Sample 应用程序运行:

下载 UA PushSample 应用程序。 使用您的应用/秘密组合更新 AirshipConfig.plist 文件 使用正确的包 ID、配置文件等更新构建。 从您的设备中删除您的应用程序(如果您尝试构建 PushSample 应用程序,如果它仍然存在且具有相同的包标识符,它们会发生冲突。 编译并运行推送示例应用程序。 在日志中查找令牌,并检查 UA 仪表板(查找 # 个令牌,或仅发送广播警报)。

你还有同样的问题吗?就我而言,这两次都消失了,并且能够成功注册令牌。我认为由于某种原因,错误配置的证书/配置文件阻止了正确创建令牌。当我修复它们时 - 为时已晚,因为 UA 库认为它已经注册,因此跳过了那部分。日志中的这一行让我怀疑:

在应用初始化时禁用应用前台检查注册

现在 2 比 2,当我将正确的 certs/bundle/provisioning 配置文件放入干净的 PushSample 应用程序时,它可以正常工作

【讨论】:

我确实设法让它工作了,但我刚刚看到你的回答。我基本上是这样做的。我完全撕毁了所有内容并重新创建了所有证书和配置文件。我重新创建了应用程序并移动了所有代码。然后我终于让它工作了。我已经提交并批准了应用程序,现在它在 App Store 中。希望您的回答对其他人有所帮助,因为这几乎是我必须做的。 Alex,你说的第三点是什么意思?也就是说,“使用正确的包 ID 更新构建......”?我想我也有同样的问题。 你能帮忙***.com/questions/29935284/…吗??

以上是关于设备令牌在开发中注册良好,但不是生产的主要内容,如果未能解决你的问题,请参考以下文章

用于开发和生产的 iOS 推送通知设备令牌

注册令牌不是有效的 FCM 注册令牌

设备在 Apple Push Notification 中注册了令牌,但没有收到来自服务器的通知

Ionic iOS Cordova 推送令牌

无法使用 API 级别 16 注册 Android 令牌

向服务器发送设备令牌或注册令牌?