【问题标题】:Can't send firebase notification via Android but it works via curl无法通过 Android 发送 Firebase 通知,但可以通过 curl 工作
【发布时间】:2019-06-19 02:11:52
【问题描述】:

我正在尝试使用 Firebase 将推送通知从一台设备发送到另一台设备(它们是两个不同的项目)。 我正在使用 POST 通过 okhttp3 库调用 API。 如果我尝试使用 curl 可以发送通知,但通过 android 我收到以下错误:

{"multicast_id":XXXXXXXX,"success":0,"failure":1,"canonical_ids":0,"results":[{"error":"MismatchSenderId"}]}

在 Android 中是否有一些元数据与 rest 调用一起发送? 怎么发送

这是 curl 调用(工作正常)

curl -H "Content-type: application/json" -H "Authorization:key=AXXXXX" -X POST -d '{"data":{"info":"abc"},"to":" DEV-TOKEN-XXX"}' https://fcm.googleapis.com/fcm/send

在 Android 中,我只是复制了相同的场景设置标头,正文 ecc 与 okhttp3

【问题讨论】:

  • FWIW:您实际上不应该将服务器身份验证 api 密钥分发给您的客户端。所以只有服务器有足够的权限向设备/主题发送消息。但您可以将上游消息发送回服务器。见firebase.google.com/docs/cloud-messaging/android/upstream
  • 老实说,我不建议给客户端足够的权限来向另一台设备发送通知。让服务器处理它(例如:设备 A 连接到具有所有凭据的服务器,然后向设备 B 发送通知)
  • 感谢@herbert 和@ZUNJAE,你说得对,我会考虑在服务器中实现它。顺便说一句,在这种情况下,我仍然想尝试从客户端发送通知以进行测试。

标签: android firebase firebase-notifications


【解决方案1】:

您可以使用以下方式实现此目的:

1)首先获取需要发送推送通知的设备的Token

FirebaseInstanceId.getInstance().getToken();

2)然后你需要创建具有两个键'to'和'notification'的JSON对象。你也可以使用'data'。它存储了有效负载信息。

JSONObject jsonObj = new JSONObject();
jsonObj.put("data", profileJson);
jsonObj.put("notification", notificationJson);
jsonObj.put("to", mPushToken);

3)然后进行发送推送通知的 API 调用。

RequestBody body = RequestBody.create(MediaType.parse("application/json; charset=utf-8"), jsonData.toString());
okhttp3.Request request = new okhttp3.Request.Builder()
        .header("Authorization", "key=" + R.string.firebase_legacy_server_key)
        .url("**https://fcm.googleapis.com/fcm/send**")
        .post(body)
        .build();

这将向给定的 firebase 令牌触发推送通知。

【讨论】:

  • notificationJson 包含什么值?
【解决方案2】:

当我在 Android 中使用“旧版服务器密钥”进行休息调用时,它起作用了。 但是使用 curl 我使用“服务器密钥”并且它工作正常。 不知道为什么。

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多