5

从 git hub 上的最新示例 (https://github.com/urbanairship/phonegap-ua-push) 来看,使用 Phonegap/Cordova 最新 v2.3.0 的全新构建,我们在 iOS 上注册设备时遇到了问题UA。在我们更新到最新版本之前,我们没有任何问题。我们正在像这样注册设备:

function on_reg(error, pushID) {
    console.log("UA Registration complete.")
}

push = window.pushNotification
push.registerEvent('registration', on_reg)

但是每次调用该代码时,都会收到一条错误消息,提示“设备令牌为零。稍后将尝试注册”。除非那永远不会发生。

这是日志:

2013-01-09 17:38:29.378 分组 [271:907] [D] -[UAPush updateRegistration] [第 589 行] 检查注册状态

2013-01-09 17:38:29.380 分组 [271:907] [D] -[UAPush updateRegistration] [第 609 行] 设备令牌为零。稍后将尝试注册

2013-01-09 17:38:29.744 Grouped[271:907] [D] +[UAKeychainUtils getDeviceID] [Line 275] 从钥匙串中检索到设备 ID 信息。

2013-01-09 17:38:29.745 Grouped[271:907] [D] +[UAKeychainUtils getDeviceID] [Line 279] 设备 ID 结果不为零。

2013-01-09 17:38:29.746 分组 [271:907] [D] +[UAKeychainUtils getDeviceID] [第 288 行] 加载的设备 ID:C1E75722-ED34-4513-BBA5-CB9EDEBBD117

2013-01-09 17:38:29.747 Grouped[271:907] [D] +[UAKeychainUtils getDeviceID] [Line 289] 加载的型号名称:iPhone4,1

2013-01-09 17:38:32.724 Grouped[271:907] [D] -[UAAnalytics requestDidSucceed:response:responseData:] [Line 461] 分析数据发送成功。状态:200

我们做错了什么?

4

1 回答 1

8

我将此错误追溯到最新版本的 PhoneGap 中所做的更改:

对于 iOS,device.platform 曾经返回“iPhone”、“iPad”或“iPod Touch”——现在它(正确地)返回“iOS”。

这与 PushNotification.js 模块冲突,返回错误信息:

// Registration

PushNotification.prototype.registerForNotificationTypes = function (types, callback) {
if(device.platform == "iPhone" || device.platform == "iPad" || device.platform == "iPod touch") {
this.call_native(callback, "registerForNotificationTypes", [types])
}
}

将其更改为device.platform == "iOS"可以解决问题。

Urban Airship,如果你想在https://github.com/urbanairship/phonegap-ua-push/blob/master/ios-sample/www/lib/PushNotification.js更新你的 git,我相信很多人会很感激它!

于 2013-01-10T03:06:59.990 回答