2015-09-10 105 views
0

即使我沒有訂閱頻道,我仍會收到推送通知。Parse.com即使未訂閱頻道,也會收到推送通知

我的應用程序從遠程JSON獲取用戶興趣並將其訂閱到Parse中的頻道。

我會盡量複製所有相關的代碼。

MyApplication.java

Parse.enableLocalDatastore(this); 
Parse.initialize(this, ParseAppID, ParseClientKey); 
ParseInstallation installation=ParseInstallation.getCurrentInstallation(); 
installation.put("UniqueId", android_id); 
installation.saveInBackground(); 

MainActivity.java(一個的AsyncTask onPostExecute內部)

JSONObject jObject = new JSONObject(result); 

int error = jObject.getInt("Error"); 

ArrayList<String> channels = new ArrayList<String>(); 

if(error==0){ 
    JSONArray intereses = jObject.getJSONArray("Interests"); 

    Log.d("ChannelsTrack", "Error: 0"); 

    for(int j=0; j < intereses.length(); j++) { 

     int interes = intereses.getInt(j); 

     String channel_name="sdc_channel_" + interes; 

     channels.add(channel_name); 

     Log.d("ChannelsTrack", channel_name); 

     ParsePush.subscribeInBackground(channel_name); 
    } 

    List<String> subscribedChannels = ParseInstallation.getCurrentInstallation().getList("channels"); 
    for(int j=0; j < subscribedChannels.size(); j++) { 

     if(!channels.contains(subscribedChannels.get(j))){ 
      ParsePush.unsubscribeInBackground(subscribedChannels.get(j)); 
     } 

    } 

}else{ 
    Log.d("ChannelsTrack", "Error: " + error); 
} 

這aparently工作。我可以看到我的Parse用戶訂閱了指定的頻道y控制檯

我無法發佈圖像,但在解析核心表中它是一行[[sdc_channel_6「,」sdc_channel_5「,」sdc_channel_2「,」sdc_channel_3 「,」sdc_channel_4「]在」頻道「列中,當我更新用戶興趣時,它會發生變化,因此我認爲它在這一點上正在發揮作用。

我使用REST API發送使用此JSON

{ 
    "data": { 
     "action": "my.application.UPDATE_STATUS", 
     "t": "Text", 
     "d": "Text 2", 
     "f": "", 
     "u": "http://example.com" 
    }, 
    "where": { 
     "channels": { 
      "$in": ["sdc_channel_99","sdc_channel_88"] 
     }, 
     "deviceType": "android" 
    } 
} 

這裏是問題的推送通知。我收到發送到「sdc_channel_99」和「sdc_channel_88」頻道的推送通知,但我沒有訂閱他們(我從未訂閱過他們)。

顯然我失去了一些東西,任何幫助?謝謝。

回答

0

我認爲這個問題是在您的複合查詢:

"where": { 
    "channels": { 
     "$in": ["sdc_channel_99","sdc_channel_88"] 
    }, 

「$的」是指「載於」因此,如果用戶訂閱頻道「sdc_channel_9」和通道「sdc_channel_8」,用戶將被選中。 可能是你應該試試這個查詢:

"where" : {"$or":[{"channels":"sdc_channel_99"},{"channels":"sdc_channel_88"}]} 
+0

謝謝,它的工作原理! – Angel

+0

如果答案有幫助,您可以對它進行投票。 – Gordons