How can I send a Firebase Cloud Messaging notification without use the Firebase Console?

后端 未结 16 1285
南旧
南旧 2020-11-22 10:17

I\'m starting with the new Google service for the notifications, Firebase Cloud Messaging.

Thanks to this code https://github.com/firebase/quickstart-a

相关标签:
16条回答
  • 2020-11-22 10:37

    Here is the working code in my project using CURL.

    <?PHP
    
    // API access key from Google API's Console
    ( 'API_ACCESS_KEY', 'YOUR-API-ACCESS-KEY-GOES-HERE' );
    
    
     $registrationIds = array( $_GET['id'] );
    
      // prep the bundle
     $msg = array
     (
       'message'    => 'here is a message. message',
        'title'     => 'This is a title. title',
        'subtitle'  => 'This is a subtitle. subtitle',
        'tickerText'    => 'Ticker text here...Ticker text here...Ticker text here',
        'vibrate'   => 1,
        'sound'     => 1,
        'largeIcon' => 'large_icon',
        'smallIcon' => 'small_icon'
     );
    
     $fields = array
     (
        // use this to method if want to send to topics
        // 'to' => 'topics/all'
        'registration_ids'  => $registrationIds,
         'data'         => $msg
     );
    
     $headers = array
     (
        'Authorization: key=' . API_ACCESS_KEY,
        'Content-Type: application/json'
     );
    
     $ch = curl_init();
     curl_setopt( $ch,CURLOPT_URL, 'https://android.googleapis.com/gcm/send' );
     curl_setopt( $ch,CURLOPT_POST, true );
     curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
     curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
     curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
     curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
     $result = curl_exec($ch );
     curl_close( $ch );
    
     echo $result;
    
    0 讨论(0)
  • 2020-11-22 10:41

    This works using CURL

    function sendGCM($message, $id) {
    
    
        $url = 'https://fcm.googleapis.com/fcm/send';
    
        $fields = array (
                'registration_ids' => array (
                        $id
                ),
                'data' => array (
                        "message" => $message
                )
        );
        $fields = json_encode ( $fields );
    
        $headers = array (
                'Authorization: key=' . "YOUR_KEY_HERE",
                '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 );
    }
    
    ?>
    

    $message is your message to send to the device

    $id is the devices registration token

    YOUR_KEY_HERE is your Server API Key (or Legacy Server API Key)

    0 讨论(0)
  • 2020-11-22 10:41

    If you're using PHP, I recommend using the PHP SDK for Firebase: Firebase Admin SDK. For an easy configuration you can follow these steps:

    Get the project credentials json file from Firebase (Initialize the sdk) and include it in your project.

    Install the SDK in your project. I use composer:

    composer require kreait/firebase-php ^4.35
    

    Try any example from the Cloud Messaging session in the SDK documentation:

    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);
    
    0 讨论(0)
  • 2020-11-22 10:43

    Firebase Cloud Messaging has a server-side APIs that you can call to send messages. See https://firebase.google.com/docs/cloud-messaging/server.

    Sending a message can be as simple as using curl to call a HTTP end-point. See https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol

    curl -X POST --header "Authorization: key=<API_ACCESS_KEY>" \
        --Header "Content-Type: application/json" \
        https://fcm.googleapis.com/fcm/send \
        -d "{\"to\":\"<YOUR_DEVICE_ID_TOKEN>\",\"notification\":{\"title\":\"Hello\",\"body\":\"Yellow\"}}"
    
    0 讨论(0)
  • 2020-11-22 10:43

    Notification or data message can be sent to firebase base cloud messaging server using FCM HTTP v1 API endpoint. https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send.

    You need to generate and download private key of service account using Firebase console and generate access key using google api client library. Use any http library to post message to above end point, below code shows posting message using OkHTTP. You can find complete server side and client side code at firebase cloud messaging and sending messages to multiple clients using fcm topic example

    If a specific client message needs to sent, you need to get firebase registration key of the client, see sending client or device specific messages to FCM server example

    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");
    }
    
    0 讨论(0)
  • 2020-11-22 10:44

    If you want to send push notifications from android check out my blog post

    Send Push Notifications from 1 android phone to another with out server.

    sending push notification is nothing but a post request to https://fcm.googleapis.com/fcm/send

    code snippet using 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);
    

    I suggest you all to check out my blog post for complete details.

    0 讨论(0)
提交回复
热议问题