从Android应用程序到浏览器的FCM消息

从Android应用程序到浏览器的FCM消息,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,Firebase托管使用Angular和Firebase消息运行我的网站构建 如果我通过CURL将FCM发送到浏览器,它将工作,并显示消息(参见底部的CURL示例) Android应用程序还添加了Firebase消息,可以从运行Firebase主机的网站接收消息 到目前为止还不错,但现在我想从Android应用程序向浏览器发送一条FCM消息 但我在Android上找不到任何好的方法来实现这一点。 Android API FirebaseMessaging和RemoteMessage只接受一个全局

Firebase托管使用Angular和Firebase消息运行我的网站构建

如果我通过CURL将FCM发送到浏览器,它将工作,并显示消息(参见底部的CURL示例)

Android应用程序还添加了Firebase消息,可以从运行Firebase主机的网站接收消息

到目前为止还不错,但现在我想从Android应用程序向浏览器发送一条FCM消息

但我在Android上找不到任何好的方法来实现这一点。
Android API FirebaseMessaging和RemoteMessage只接受一个全局的“发送者\u id”和一个“收件人”地址,就像在CURL或HTTP请求帖子中一样

如果我使用HTTPPOST请求,它是有效的,但在这种情况下,我需要Android应用程序中的服务器API密钥(不好!!)(请参阅底部的HTTP示例)

那么,有没有办法通过Android应用程序将FCM消息直接发送到特定设备(在我的例子中是浏览器)


我用来测试浏览器站点是否正常工作的curl调用:

curl -H "Content-type: application/json" -H "Authorization:key=<API-KEY>"  -X POST -d "{\"data\": { \"score\": \"5x1\",\"time\": \"15:10\"},\"to\" : \"<token from the browser>\"}" https://fcm.googleapis.com/fcm/send
curl-H”内容类型:application/json“-H”授权:key=“-X POST-d”{“data\”:{“score\”:“5x1\”,“time\:“15:10\”,“to\”:“}”https://fcm.googleapis.com/fcm/send
用于测试的Android应用程序内部HTTP调用:

try {
                    URL url = new URL("https://fcm.googleapis.com/fcm/send");
                    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
                    urlConnection.setRequestMethod("POST");
                    urlConnection.setDoOutput(true);
                    urlConnection.setRequestProperty("Content-Type", "application/json");
                    urlConnection.setRequestProperty("Authorization", "key=<API-KEY>");
                    String postJsonData = "{\"to\": \"<token from the browser>\", \"data\": {\"data\": \"" + data.getNote() + "\"}}";
                    urlConnection.setDoOutput(true);

                    DataOutputStream wr = new DataOutputStream(urlConnection.getOutputStream());
                    wr.writeBytes(postJsonData);
                    wr.flush();
                    wr.close();

                    int responseCode = urlConnection.getResponseCode();
                    log.i(TAG, "POST Response Code :: " + responseCode);

                    if (responseCode == HttpURLConnection.HTTP_OK){
                        log.i(TAG, "succeeded");
                    }
                } catch(MalformedURLException e) {
                    log.e(TAG, "MalformedURLException" , e);
                } catch (IOException e) {
                    log.e(TAG, "IOException" , e);
                }
试试看{
URL=新URL(“https://fcm.googleapis.com/fcm/send");
HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod(“POST”);
urlConnection.setDoOutput(true);
setRequestProperty(“内容类型”、“应用程序/json”);
setRequestProperty(“Authorization”,“key=”);
字符串postJsonData=“{\”to\:\”,\“data\”:{\“data\”:\“+data.getNote()+“\”}”;
urlConnection.setDoOutput(true);
DataOutputStream wr=新的DataOutputStream(urlConnection.getOutputStream());
wr.writeBytes(postJsonData);
wr.flush();
wr.close();
int responseCode=urlConnection.getResponseCode();
log.i(标签,“响应后代码::”+响应代码);
if(responseCode==HttpURLConnection.HTTP\u确定){
log.i(标记“成功”);
}
}捕获(格式错误){
log.e(标签“MalformedURLException”,e);
}捕获(IOE异常){
log.e(标签“IOException”,e);
}

使用服务器键在firebase函数中部署代码,从android应用程序中点击。

请尽量少用粗体字。它可能会分散注意力,使文本更难阅读。更改,抱歉。我用粗体字写了很多;-)是的,这也是一种选择。但我想知道,如果没有云功能,是否有办法做到这一点。和我在android应用程序的网页上做的一样。不!如果你想点击谷歌fcm服务器,那么服务器密钥是必须的,