0

我正在尝试使用 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:未授权:需要主密钥

谁能帮我这个?

4

2 回答 2

1

出于安全原因,不建议直接从前端发送推送。想象一下,黑客可以向您的所有客户群发送糟糕的消息。

推荐的方法: - 创建一个云代码函数来发送推送 - 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);
  }
});
于 2019-05-08T17:31:36.870 回答
0

Parse Server 不再支持客户端推送,因为它是一个重大的安全风险。最好的替代方法是将这个逻辑放在云代码函数中,并通过 Android SDK 调用它。

有关更多信息,请参阅JS 指南中有关发送推送通知的部分。

记得添加使用{useMasterKey:true}

于 2019-05-08T17:20:45.940 回答