Phonegap 插件推送在 iOS 13 及更高版本上返回奇怪格式的 iOS 设备令牌
Posted
技术标签:
【中文标题】Phonegap 插件推送在 iOS 13 及更高版本上返回奇怪格式的 iOS 设备令牌【英文标题】:Phonegap plugin push returns strange format of iOS device token on iOS 13 and higher 【发布时间】:2019-12-05 10:21:20 【问题描述】:我在 ionic 3 应用程序中使用 phonegap-plugin-push。
但是最近随着越来越多的手机更新到 ios 13 及更高版本,设备注册将不再起作用。
设备调用我们这边的 api,然后将手机注册到 azure push hub。
这就是我设置离子注册过程的方式。
const options: PushOptions =
android:
senderID: "58846546653626",
icon: 'pushicon',
iconColor: '#7BC3AD' //light blue green thingy
,
ios:
alert: "true",
badge: "true",
sound: "true"
;
this.pushObject = this.push.init(options);
this.pushObject.on('registration').subscribe(data =>
this.pushRegister(data);
);
pushRegister(data: any)
// Get the native platform of the device.
let platform: any = device.platform;
// Get the handle returned during registration.
let handle: any = data.registrationId;
// Set the device-specific message template.
let infoToRegister: any =
"Platform": (platform == 'android' || platform == 'Android') ? 'gcm' : 'apns',
"DeviceToken": handle,
"Tags": [] //set serverside based on authorization
let url = (globalVars.serverurl+ 'api/Register');
let options = this.dataService.getRequestOptions();
let body: string = JSON.stringify(infoToRegister);
this.httpClient.post(url, body, options).subscribe(successResponse =>
console.log(successResponse);
, errorResponse =>
console.log(errorResponse);
);
这一切都适用于运行 iOS 13 以下的手机。
但是在 iOS 13 中,registrationId 看起来完全不同,注册到 azure push hub 的 api 方法会抛出错误:设备令牌中的一个或多个字符不是十六进制数字。
iOS 13 发布的失败数据示例:
"Platform":"apns","DeviceToken":"length=32,bytes=0xc0d97379b07611f8e4e7529e3ee02e1d...d0a4e98468524d88","Tags":[]
有什么方法可以得到正确的令牌吗?如上所示,字节也被截断,所以我想我也不能注册。
【问题讨论】:
我确实从 iOS 13.1.2 => 13.2.3 更新了手机,现在再次注册。但是我不确定这是解决问题的方法。或许可以通过其他方式解决。 【参考方案1】:问题
这是因为这 4 个损坏的更改:https://onesignal.com/blog/ios-13-introduces-4-breaking-changes-to-notifications/
解决方案 - 1
这里有很好的解释:Does iOS 13 has new way of getting device notification token?
解决方案 - 2
如果您使用的是 Objective-C 或 Swift 3x,请点击此链接:Get device token for push notification
解决方案 - 3
如果您使用的是 Ionic - OneSignal,请点击此链接:Ionic - OneSignal doesn't work on iOS 13.x
解决方案 - 4
如果您在使用 Ionic Cordova 构建移动应用程序时使用 phone-gap 插件解决此问题,请点击此链接:https://github.com/phonegap/phonegap-plugin-push/issues/2819
【讨论】:
【参考方案2】:如果有人遇到这个问题并且没有使用 Ionic,而是使用普通的 Cordova,解决方案是将您的 phonegap-plugin-push
插件更新到 2.3.0 或更高版本(包含修复的拉取请求在这里:@987654321 @)。
您可以通过运行以下命令来验证您是否安装了正确版本的插件:cordova plugins
为了更好地衡量,请确保在更新推送通知插件后运行cordova platform remove ios
和cordova platform add ios
,以确保更新的插件正确内置到编译的应用程序中。旧版本的插件可以通过多种方式保留在已编译的应用程序中。
【讨论】:
我最终升级了项目中的基本 cordova 包。这当然也会导致几乎所有其他软件包的升级。但首先在这样做之后我可以更新到更新的phonegap-plugin-push。 “cordova-android”:“^9.0.0”,“cordova-ios”:“^6.0.0”,“phonegap-plugin-push”:“^2.3.0”,以上是关于Phonegap 插件推送在 iOS 13 及更高版本上返回奇怪格式的 iOS 设备令牌的主要内容,如果未能解决你的问题,请参考以下文章
不使用 APNS 的 iOS 4.0 及更高版本的推送服务器