2015-12-28 2 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); 
    }); 

});

Но сообщение так и не было получено. Если я отправил push-уведомление из панели анализа синтаксиса, все будет работать нормально. Кто-нибудь знает, как его решить? Устройство ожидает получения JSON, поэтому моя облачная функция не может отправлять данные в формате json? Заранее спасибо

+0

Включили ли вы нажатие клиента? – SaNtoRiaN

+0

Нет, я не думаю, что использование облачных функций не требуется для нажатия на клик. –

ответ

1

У меня возникли проблемы при отправке уведомлений из-за 2-х вещей

  • позволяет клиенту толчок «не в вашем случае»
  • не спасали пользователя в установке «попробовать следующее»

После входа пользователя в приложение добавить его идентификатор в установку по

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 
     } 
    } 
}); 

надеюсь, что это помогает :)

Update
В своем коде вы отправляете USERID получателя, хотя вы сохранили имя пользователя также в функции облака у вас есть та же проблема, имя пользователя сохраняется, но вы запрашиваете установка на основе идентификатора. Я обновил установку выше и изменил «пользователь» в вашей облачной функции на «userId»

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

Я включаю клик, но ничего не произошло. Также я сохраняю своего пользователя со следующим: ParseUser user = new ParseUser(); user.setUsername (имя пользователя); user.setEmail (электронная почта); user.signUpInBackground (новый SignUpCallback() { Возможно, я не отправил данные в объект JSON? Когда я получил уведомления в устройстве, я пытаюсь получить объект JSON –

+0

Сохранение информации о пользователе для установки отличается от регистрации, попробуйте код выше после регистрации и скажите мне результат – SaNtoRiaN

+0

Нет, ничего не произошло снова. В панели анализа появляется уведомление, но отправленное сообщение снова было нулевым. –

Смежные вопросы