Rumah  >  Soal Jawab  >  teks badan

Buat token akses Pemesejan Firebase

Saya boleh menghantar pemberitahuan melalui Pemesejan Firebase menggunakan permintaan CURL di bawah. Saya sedang menggunakan Taman Permainan OAuth 2.0 untuk mendapatkan token akses. Saya perlu melaksanakan skrip PHP untuk melakukan ini. Bagaimana untuk menjana token akses secara pemrograman dalam PHP?

curl -X POST -k -H 'Authorization: Bearer access_token_goes_here' -H 'Content-Type: application/json' -i 'https://fcm.googleapis.com/v1/projects/projectId/messages:send' --data '{
  "message":{
    "topic" : "newTopic",
    "notification" : {
      "body" : "This is a Firebase Cloud Messaging Topic Message!",
      "title" : "FCM Message"
      }
   }
}

P粉178132828P粉178132828269 hari yang lalu340

membalas semua(1)saya akan balas

  • P粉713866425

    P粉7138664252023-12-30 00:15:32

    Saya menjumpai banyak penyelesaian, tetapi semuanya memerlukan banyak perpustakaan dan kebergantungan.

    Saya membina penyelesaian saya sendiri tanpa kebergantungan tambahan. Ini ialah API untuk mendapatkan token OAuth2: https://developers.google.com/identity/protocols/oauth2/service-account#httprest

    Langkah pertama ialah mencipta JWT (Json Web Token). Menggunakan JWT ini, token pembawa boleh diminta.

    // php doesn't have build-in support for base64UrlEncoded strings, so I added one myself
    function base64UrlEncode($text)
    {
        return str_replace(
            ['+', '/', '='],
            ['-', '_', ''],
            base64_encode($text)
        );
    }
    
    // Read service account details
    $authConfigString = file_get_contents("path_to_the_json_file_jou_downloaded_from_firebase_console.json");
    
    // Parse service account details
    $authConfig = json_decode($authConfigString);
    
    // Read private key from service account details
    $secret = openssl_get_privatekey($authConfig->private_key);
    
    // Create the token header
    $header = json_encode([
        'typ' => 'JWT',
        'alg' => 'RS256'
    ]);
    
    // Get seconds since 1 January 1970
    $time = time();
    
    // Allow 1 minute time deviation
    $start = $time - 60;
    $end = $time + 3600;
    
    $payload = json_encode([
        "iss" => $authConfig->client_email,
        "scope" => "https://www.googleapis.com/auth/firebase.messaging",
        "aud" => "https://oauth2.googleapis.com/token",
        "exp" => $end,
        "iat" => $start
    ]);
    
    // Encode Header
    $base64UrlHeader = base64UrlEncode($header);
    
    // Encode Payload
    $base64UrlPayload = base64UrlEncode($payload);
    
    // Create Signature Hash
    $result = openssl_sign($base64UrlHeader . "." . $base64UrlPayload, $signature, $secret, OPENSSL_ALGO_SHA256);
    
    // Encode Signature to Base64Url String
    $base64UrlSignature = base64UrlEncode($signature);
    
    // Create JWT
    $jwt = $base64UrlHeader . "." . $base64UrlPayload . "." . $base64UrlSignature;
    
    //-----Request token------
    $options = array('http' => array(
        'method'  => 'POST',
        'content' => 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&assertion='.$jwt,
        'header'  =>
            "Content-Type: application/x-www-form-urlencoded"
    ));
    $context  = stream_context_create($options);
    $responseText = file_get_contents("https://oauth2.googleapis.com/token", false, $context);
    
    $response = json_decode($responseText);
    

    $response Mengandungi token pembawa. Anda harus menyimpan token ini untuk digunakan oleh permintaan lain dan meminta token pembawa baharu apabila ia hampir tamat tempoh. Jangka hayat maksimum token pembawa ini ialah 1 jam.

    balas
    0
  • Batalbalas