如何在不使用 Firebase 控制台的情况下发送 Firebase 云消息通知?

257

我正在使用新的Google通知服务Firebase Cloud Messaging

借助于这个代码https://github.com/firebase/quickstart-android/tree/master/messaging,我可以从我的Firebase用户控制台向我的Android设备发送通知。

是否有任何API或方法可以在不使用Firebase控制台的情况下发送通知?我的意思是,例如,一个PHP API或类似的东西,以直接从自己的服务器创建通知。


1
你将服务器托管在哪里以发送通知? - Rodrigo Ruiz
@David Corral,请检查我的答案是否正确。 https://dev59.com/DJffa4cB1Zd3GeqP6VaR#38992689 - Sandeep Devhare
已编写了一个Spring应用程序,用于发送FCM通知,如果您想查看它的工作原理-> https://github.com/aniket91/WebDynamo/blob/master/src/com/osfg/controllers/FCMSender.java - Aniket Thakur
你可以使用Retrofit来实现设备到设备的消息传递。https://dev59.com/0VoU5IYBdhLWcg3wc2xW#41913555 - eurosecom
阅读此博客文章以获取更多详细信息:http://developine.com/how-to-send-firebase-push-notifications-from-app-server-tutorial/ - Developine
显示剩余2条评论
17个回答

3
您可以使用例如PHP脚本来为Google Cloud Messaging (GCM)发送消息。Firebase及其控制台是基于GCM的。
我在GitHub上找到了这个: https://gist.github.com/prime31/5675017 提示: 这个PHP脚本会产生一个安卓通知
因此:如果您想在安卓设备上接收并显示通知,请阅读Koot的回答

2
通知或数据消息可以使用FCM HTTP v1 API端点发送到Firebase基础云消息传递服务器。 https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send
您需要使用Firebase控制台生成和下载服务帐户的私钥,并使用Google API客户端库生成访问密钥。使用任何HTTP库将消息发布到上述端点,下面的代码显示使用OkHTTP发布消息。 您可以在Firebase Cloud Messaging和使用FCM主题示例向多个客户端发送消息中找到完整的服务器端和客户端代码。
如果需要发送特定客户端的消息,则需要获取客户端的Firebase注册密钥,请参见将客户端或设备特定消息发送到FCM服务器示例
String SCOPE = "https://www.googleapis.com/auth/firebase.messaging";
String FCM_ENDPOINT
     = "https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send";

GoogleCredential googleCredential = GoogleCredential
    .fromStream(new FileInputStream("firebase-private-key.json"))
    .createScoped(Arrays.asList(SCOPE));
googleCredential.refreshToken();
String token = googleCredential.getAccessToken();



final MediaType mediaType = MediaType.parse("application/json");

OkHttpClient httpClient = new OkHttpClient();

Request request = new Request.Builder()
    .url(FCM_ENDPOINT)
    .addHeader("Content-Type", "application/json; UTF-8")
    .addHeader("Authorization", "Bearer " + token)
    .post(RequestBody.create(mediaType, jsonMessage))
    .build();


Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
    log.info("Message sent to FCM server");
}

我的朋友,https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send 这个链接似乎已经过期了! - Naser Nikzad
2
你需要使用你的谷歌项目URL,而不是那个。用你的项目名称替换“zotino-stores”。 - Arnav Rao

2
如果您正在使用PHP,我建议使用Firebase的PHP SDK:Firebase Admin SDK。为了方便配置,您可以按照以下步骤进行操作:
从Firebase中获取项目凭据JSON文件(初始化SDK),并将其包含在您的项目中。
将SDK安装到您的项目中。我使用composer:
composer require kreait/firebase-php ^4.35

请从SDK文档中的云消息会话中尝试任何示例:

use Kreait\Firebase;
use Kreait\Firebase\Messaging\CloudMessage;

$messaging = (new Firebase\Factory())
->withServiceAccount('/path/to/firebase_credentials.json')
->createMessaging();

$message = CloudMessage::withTarget(/* see sections below */)
    ->withNotification(Notification::create('Title', 'Body'))
    ->withData(['key' => 'value']);

$messaging->send($message);

2
Go to cloud Messaging select:  Server key



function sendGCM($message, $deviceToken) {

    $url = 'https://fcm.googleapis.com/fcm/send';
    $fields = array (
            'registration_ids' => array (
                $id
            ),
            'data' => array (
                "title" =>  "Notification title",
                "body" =>  $message,
            )
    );
    $fields = json_encode ( $fields );
    $headers = array (
        'Authorization: key=' . "YOUR_SERVER_KEY",
        'Content-Type: application/json'
    );
    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_POST, true );
    curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields );
    $result = curl_exec ( $ch );
    echo $result;

    curl_close ($ch);
}

'数据' => array ( 替换为 '通知' => array ( - Massimo Pavanel

1

我同意...但不幸的是,由于需要先建立一个计费账户,我们不能再使用它了。你觉得我可以从我的个人Node.js服务器调用相同的代码吗? - Yo Apps

0

使用 Firebase 控制台,您可以基于应用程序包向所有用户发送消息。但是,使用 CURL 或 PHP API 是不可能的。

通过 API,您可以向特定设备 ID 或已订阅选定主题或已订阅主题用户的用户发送通知。

Get a view on following link. It will help you.
https://firebase.google.com/docs/cloud-messaging/send-message

是的,您也可以使用PHP curl实现此功能,请参见https://gist.github.com/prime31/5675017(但请阅读上述地址中的所有评论,因为需要进行两个小修改:1 url = https://fcm.googleapis.com/fcm/send 2.将“data”替换为“notification”。已测试并正常工作。 - MTK

0
如果您想从Android发送推送通知,请查看我的博客文章。 使用无服务器将推送通知从一个Android手机发送到另一个。 发送推送通知只是向https://fcm.googleapis.com/fcm/send发出POST请求。
使用Volley的代码片段:
    JSONObject json = new JSONObject();
 try {
 JSONObject userData=new JSONObject();
 userData.put("title","your title");
 userData.put("body","your body");

json.put("data",userData);
json.put("to", receiverFirebaseToken);
 }
 catch (JSONException e) {
 e.printStackTrace();
 }

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://fcm.googleapis.com/fcm/send", json, new Response.Listener<JSONObject>() {
 @Override
 public void onResponse(JSONObject response) {

Log.i("onResponse", "" + response.toString());
 }
 }, new Response.ErrorListener() {
 @Override
 public void onErrorResponse(VolleyError error) {

}
 }) {
 @Override
 public Map<String, String> getHeaders() throws AuthFailureError {

Map<String, String> params = new HashMap<String, String>();
 params.put("Authorizationey=" + SERVER_API_KEY);
 params.put("Content-Typepplication/json");
 return params;
 }
 };
 MySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);

我建议大家查看我的博客文章以获取完整的细节。


http://developine.com/how-to-send-firebase-push-notifications-from-app-server-tutorial/ - Developine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接