ошибка неавторизована: требуется мастер-ключ при попытке отправить уведомление с разбором на целевое устройство Android Parse - PullRequest
0 голосов
/ 08 мая 2019

Я пытаюсь отправить уведомление на специальное устройство с помощью Parse In android. это мой код для ParseInstallation:

 ParseInstallation installation = ParseInstallation.getCurrentInstallation();
    installation.put("device_id", "1234567890");
    installation.saveInBackground(new SaveCallback() {
        @Override
        public void done(ParseException e) {
            Log.d(TAG, "done1: "+e);
        }
    });

и это мой код для отправки уведомления на специальное устройство, которое я уже установил:

ParseQuery query = ParseInstallation.getQuery();
query.whereEqualTo("device_id", "1234567890");
ParsePush push = new ParsePush();
push.setQuery(query);
push.setMessage("salamm");
push.sendInBackground(new SendCallback() {
    @Override
    public void done(ParseException e) {
        Log.d(TAG, "done: "+e);
    }
});

и я получаю эту ошибку в журнале: сделано: com.parse.ParseRequest $ ParseRequestException: не авторизовано: требуется главный ключ

Может ли кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Из соображений безопасности не рекомендуется отправлять push-сообщения непосредственно с внешнего интерфейса. Представьте, что хакер может отправить плохой массаж всем вашим клиентам.

Рекомендуемый способ сделать это: - Создать функцию облачного кода для отправки push - Android-приложение будет вызывать эту функцию облачного кода

Вот как должна нравиться ваша функция облачного кода:

Parse.Cloud.define('sendPush', function(request, response) {
  const query = new Parse.Query(Parse.Installation);
  query.equalTo('device_id', request.params.deviceId);
  Parse.Push.send({
    where: query,
    data: {
      alert: request.params.message
    }
  },
  { useMasterKey: true }
  )
  .then(function() {
    response.success();
  }, function(error) {
    response.error(error);
  });
});

И вот как должен выглядеть ваш клиентский код:

HashMap<String, String> params = new HashMap();
params.put("deviceId", "1234567890");
params.put("message", "salamm");
ParseCloud.callFunctionInBackground("sendPush", params, new
FunctionCallback<Object>() {
  @Override
  public void done(Object result, ParseException e) {
    Log.d(TAG, "done: "+e);
  }
});
0 голосов
/ 08 мая 2019

Parse Server mo больше поддерживает push клиента, так как это представляет значительную угрозу безопасности. Лучшая альтернатива - поместить эту логику в функцию облачного кода и вызывать ее через Android SDK.

Подробнее см. В разделе отправка push-уведомлений в руководстве по JS .

Не забудьте добавить использование {useMasterKey:true}

...