我正在尝试使用android中的Parse将通知发送到特定设备。 这是我的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:未经授权:需要主密钥
有人可以帮我吗?
答案 0 :(得分: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);
}
});
答案 1 :(得分:0)
Parse Server mo不再支持客户端推送,因为它存在重大的安全风险。最好的选择是将此逻辑放在云代码函数中,然后通过Android SDK调用它。
有关更多信息,请参见sending push notification in the JS guide上的部分。
记住要添加使用{useMasterKey:true}