Phonegap 插件在 iOS 13 及更高版本上推送 returns iOS 设备令牌的奇怪格式
Phonegap plugin push returns strange format of iOS device token on iOS 13 and higher
我在 ionic 3 应用程序中使用 phonegap-plugin-push。
但是最近,随着越来越多的 phone 更新到 iOS 13 及更高版本,设备注册将不再有效。
设备调用我们这边的 api,后者又向 azure push hub 注册 phone。
这就是我设置离子注册过程的方式。
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);
});
}
这一切都适用于 phones 运行 iOS 低于 13。
但是 iOS 13 registrationId 看起来完全不同,注册到 azure push hub 的 api 方法会抛出错误:设备令牌中的一个或多个字符不是十六进制数.
来自 iOS 13 的失败发布数据示例:
{"Platform":"apns","DeviceToken":"{length=32,bytes=0xc0d97379b07611f8e4e7529e3ee02e1d...d0a4e98468524d88}","Tags":[]}
有什么方法可以得到正确的令牌吗?如上所示,字节也被截断了,所以我想我也无法注册。
问题
这是因为这 4 个破坏性的变化:https://onesignal.com/blog/ios-13-introduces-4-breaking-changes-to-notifications/
解 - 1
这里解释的很好:
解 - 2
如果您使用的是 Objective-C 或 Swift 3x,请遵循此 link:Get device token for push notification
解 - 3
如果您使用的是 Ionic - OneSignal,请遵循此 link:Ionic - OneSignal doesn't work on iOS 13.x
解 - 4
如果您在使用 Ionic Cordova 构建移动应用程序时使用 phone-gap 插件来解决此问题,请遵循此 link:https://github.com/phonegap/phonegap-plugin-push/issues/2819
如果有人遇到这个问题并且没有使用 Ionic,而是使用普通的 Cordova,解决方案是将您的 phonegap-plugin-push
插件更新到版本 2.3.0 或更高版本(包含修复的拉取请求是这里:https://github.com/phonegap/phonegap-plugin-push/pull/2808 ).
您可以通过 运行 命令验证您安装的插件版本是否正确:cordova plugins
为了更好地衡量,请确保在更新推送通知插件后 运行 cordova platform remove ios
和 cordova platform add ios
以确保更新的插件正确内置到编译的应用程序中。旧版本的插件可以通过多种方式保留在已编译的应用程序中。
我在 ionic 3 应用程序中使用 phonegap-plugin-push。
但是最近,随着越来越多的 phone 更新到 iOS 13 及更高版本,设备注册将不再有效。
设备调用我们这边的 api,后者又向 azure push hub 注册 phone。
这就是我设置离子注册过程的方式。
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);
});
}
这一切都适用于 phones 运行 iOS 低于 13。
但是 iOS 13 registrationId 看起来完全不同,注册到 azure push hub 的 api 方法会抛出错误:设备令牌中的一个或多个字符不是十六进制数.
来自 iOS 13 的失败发布数据示例:
{"Platform":"apns","DeviceToken":"{length=32,bytes=0xc0d97379b07611f8e4e7529e3ee02e1d...d0a4e98468524d88}","Tags":[]}
有什么方法可以得到正确的令牌吗?如上所示,字节也被截断了,所以我想我也无法注册。
问题
这是因为这 4 个破坏性的变化:https://onesignal.com/blog/ios-13-introduces-4-breaking-changes-to-notifications/
解 - 1
这里解释的很好:
解 - 2
如果您使用的是 Objective-C 或 Swift 3x,请遵循此 link:Get device token for push notification
解 - 3
如果您使用的是 Ionic - OneSignal,请遵循此 link:Ionic - OneSignal doesn't work on iOS 13.x
解 - 4
如果您在使用 Ionic Cordova 构建移动应用程序时使用 phone-gap 插件来解决此问题,请遵循此 link:https://github.com/phonegap/phonegap-plugin-push/issues/2819
如果有人遇到这个问题并且没有使用 Ionic,而是使用普通的 Cordova,解决方案是将您的 phonegap-plugin-push
插件更新到版本 2.3.0 或更高版本(包含修复的拉取请求是这里:https://github.com/phonegap/phonegap-plugin-push/pull/2808 ).
您可以通过 运行 命令验证您安装的插件版本是否正确:cordova plugins
为了更好地衡量,请确保在更新推送通知插件后 运行 cordova platform remove ios
和 cordova platform add ios
以确保更新的插件正确内置到编译的应用程序中。旧版本的插件可以通过多种方式保留在已编译的应用程序中。