2016-04-25 40 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。