2015-12-28 23 views
1

我創建了一個應用程序,用戶可以在其他用戶中發送消息(通知)。請使用解析SDK來解決這些問題。所以我用下面的代碼將設備發出的消息發送到解析雲。解析雲功能發送JSON給特定用戶

final ParseQuery<ParseUser> query = ParseUser.getQuery(); 
    query.whereEqualTo("email", "[email protected]"); 
    query.getFirstInBackground(new GetCallback<ParseUser>() { 

     public void done(ParseUser object, ParseException e) { 
      if (e == null) { 
       Toast.makeText(getActivity(), "User found", Toast.LENGTH_SHORT).show(); 
       String search_username = object.getString("username"); 
       String id = object.getObjectId(); 
       Log.d("ObjectID:",id); 
       HashMap<String, Object> params = new HashMap<String, Object>(); 
       params.put("recipientId", id); 
       params.put("message", username); 
       ParseCloud.callFunctionInBackground("sendPushToUser", params, new FunctionCallback<String>() { 
        public void done(String success, ParseException e) { 
         if (e == null) { 
          // Push sent successfully 
          Toast.makeText(getActivity(), "Request send", Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 

然後我有下一個雲功能接收和推送消息給特定用戶。

Parse.Cloud.define("sendPushToUser", function(request,response){ 

    var senderUser = request.user; 
    var recipientUserId = request.params.recipientId; 
    var message = request.params.message; 
    var title ="Friend Request"; 
    if(message.length > 140){ 
      message = message.substring(0, 137) + "..."; 
    } 

    var recipientUser = new Parse.User(); 
    recipientUser.id = recipientUserId; 
    var pushQuery = new Parse.Query(Parse.Installation); 
    pushQuery.equalTo("user", recipientUser); 
    Parse.Push.send({ 
      where: pushQuery, 
      data: { 
        "alert":{"data":{"message":"message", 
            "title":"title"}} 
        } 
    }).then(function(){ 
      response.success("true") 
    }, function(error) { 
      response.error("Push failed to send with error: "+error.message); 
    }); 

});

但是從未收到該消息。如果我從解析儀表板發送推送通知,一切正常。任何人都知道如何解決它?設備期望收到JSON,因此我的雲端功能可能不會以json格式發送數據?在此先感謝

+0

您是否啓用了客戶端推送? – SaNtoRiaN

+0

不,我認爲使用雲功能並不需要啓用客戶端推送 –

回答

1

我有問題,同時發送的,因爲兩件事情

  • 通知啓用客戶推「不是你的情況」
  • 沒有保存用戶在安裝「試試下面的」

用戶登錄到您的應用程序後

ParseInstallation installation = ParseInstallation.getCurrentInstallation(); 
installation.addUnique("userId", currentUser.getObjectId()); 
installation.saveInBackground(new SaveCallback() { 
    @Override 
    public void done(ParseException e) { 
     // check the returned exception 
     if (e == null) { 
      // everything worked fine 
     } else { 
      // error occurred 
     } 
    } 
}); 
他的ID添加到安裝10

希望它能幫助:)

更新
在你的代碼要發送的收件人用戶id雖然你在你的雲功能還保存的用戶名,你有同樣的問題,用戶名被保存,但您查詢基於id的安裝。我已經更新了上面的安裝,還將雲功能中的「用戶」更改爲「userId」

pushQuery.equalTo("userId", recipientUser); 
+0

我啓用客戶端推送,但什麼也沒有發生。我還保存我的用戶與以下內容: ParseUser user = new ParseUser(); user.setUsername(username); user.setEmail(email); user.signUpInBackground(新SignUpCallback(){ 可我並沒有將數據發送到JSON對象?當我在設備接收通知我試圖讓JSON對象 –

+0

保存用戶信息的安裝從簽約不同,試試上面的代碼註冊並告訴我結果 – SaNtoRiaN

+0

沒有,沒有再次發生後,在解析儀表盤顯示的通知,但推送到爲零一次。 –