在Ionic / Cordova上解析推送通知:无效的设备令牌

时间:2016-04-25 21:05:07

标签: cordova parse-platform

我正在尝试在我的离子应用中设置Parse推送通知。我目前正在做的事情:

var parseInstallationId = Parse._getInstallationId().then(function(uuid){
   alert(typeof uuid);
        var d = {
          "deviceType": platform,  
          "deviceToken": uuid,
          "channels": [""]
        }
        alert(JSON.stringify(d));

        $http({
            method: 'POST',
            url: 'https://api.parse.com/1/installations/',
            headers: {'X-Parse-Application-Id':'parse-id','X-Parse-REST-API-Key':'parse-rest-id'},
            data: d
          }).then(...)

我继续获得无效的设备令牌:8493-4389-4839 ...'。我猜这个数字是错误的格式或只是错误的数字。

我尝试使用像https://github.com/grrrian/phonegap-parse-plugin之类的一些存储库,但是遇到了构建错误,所以想要去api。

我已经圈了好几个小时了。我被告知我需要创建一个Installation对象,订阅一个频道并将用户设置为该对象。我的合作伙伴在xcode上设置了后端和配置文件。所以只需要连接项目中的实际代码。

3 个答案:

答案 0 :(得分:0)

结束解决它:

var parseInstallationId = Parse._getInstallationId().then(function(inId){

      var d = {
        "deviceType": platform,  
        "deviceToken": registrationId,
        "channels": [""],
        "installationId":inId
      }
      var userId = Parse.User.current().id; 
      d['user'] = {
        "__type": "Pointer",
        "className": "_User",
        "objectId": userId
      }
      if(platform === 'android'){
        d.pushType = 'gcm';
      }

      $http({
        method: 'POST',
        url: 'https://api.parse.com/1/installations/',
        headers: {'X-Parse-Application-Id':'XXXX','X-Parse-REST-API-Key':'XXXX'},
        data: d
      }).then(function successCallback(response) {
          installationId = response;
        }, 
        function errorCallback(response) {
          console.log('pushInstallation error: ', response);
      });
    })

我获取了安装ID,并将其保存到传递给Parse的对象中。 registrationId来自使用:

var push = PushNotification.init({
      android: {
          senderID: "XXXX"
      },
      ios: {
          alert: "true",
          badge: true,
          sound: 'false'
      },
      windows: {}
    });

push.on('registration', function(data) {
      User.pushInstallation(platform, data.registrationId);
})

这是https://github.com/phonegap/phonegap-plugin-push

答案 1 :(得分:0)

我还没有发表评论,所以我不得不在这里问一下。您是否在离子应用程序中使用Javascript SDK?您是否只安装了phonegap推送插件并仅使用上面的代码(我在您的app.js中假设)来设置推送通知?关心为我们设置一个指导你的灵魂:) ??

答案 2 :(得分:0)

在开发parse-push-plugin时,我发现对于离子项目,你正在处理2个不同的installationId:

  1. Parse._getInstallationId()由Parse Javascript sdk生成,它与您的设备无关。即使在桌面浏览器上也存在此installationId,而Parse不会将其作为安装对象存储在数据库中。

  2. 存储在数据库中的Installation对象中并用于目标推送的设备installationId由本机Parse SDK生成。在Android上,它是ParseInstallation.getCurrentInstallation().getInstallationId()。在iOS上,它是[PFInstallation currentInstallation].installationId

  3. 此外,deviceToken是一个完全不同的野兽。 InstallationId由您使用的Parse SDK生成,它完全在您的计算机上生成。设备令牌只能通过向GCM或APNS注册来获得。

    因此,在您的原始问题中,错误是2折:使用错误的安装ID并将其用作deviceToken。