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 ioscordova platform add ios 以确保更新的插件正确内置到编译的应用程序中。旧版本的插件可以通过多种方式保留在已编译的应用程序中。