2016-04-25 79 views
0

我正尝试在离子应用程序中设置Parse推送通知。我目前在做:Ionic/Cordova上的解析推送通知:无效的设备令牌

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而发生构建错误。

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

回答

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,并保存到传入解析的对象。该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

+0

只是一个相关的说明:一般来说,如果你从JavaScript端初始化Parse.Push,你将无法通过通知来处理冷启动。当通知到达并且您的应用程序尚未运行时,您可能会在Android上收到崩溃消息。这是因为Android的init序列是Application - > ... handle push ... - > launch Activity来加载WebView并启动javascript子系统。在“处理推送”阶段,因为我们正在处理Parse.Push和Android Parse SDK尚未初始化,所以我们发生崩溃。 – lastoneisbearfood

0

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

+0

我可以很快设置指南。但总之,我正在使用angularjs并使用https://github.com/driftyco/ionic来设置角度和离子。然后安装phonegap推送插件。通过调用push。('注册')(见下面的代码),这将打开通知许可模式。下面我在一个服务中设置的第一个代码,第二个在控制器中。你可以把它们放在你喜欢的任何地方 –

0

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

  1. Parse._getInstallationId()被解析的Javascript SDK生成的,它没有任何关系,与你的设备。即使在桌面浏览器中,此安装ID也存在,并且Parse不会将其作为安装对象存储在数据库中。

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

此外,deviceToken是一个完全不同的野兽。 InstallationId由您正在使用的Parse SDK生成,并且完全在您的机器上生成。设备令牌只能通过询问使用GCM或APNS进行注册来获得。

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