Dengan FCM HTTP v1 API, Anda dapat membuat permintaan pesan dan mengirimkannya ke jenis target berikut:
- Nama topik
- Kondisi
- Token pendaftaran perangkat
- Nama grup perangkat (hanya protokol)
Anda dapat mengirim pesan dengan payload notifikasi yang terdiri atas kolom yang telah ditentukan, payload data untuk kolom yang ditentukan oleh pengguna, atau pesan yang berisi kedua jenis payload. Lihat Jenis pesan untuk mengetahui informasi selengkapnya.
Mengizinkan permintaan kirim HTTP v1
Tergantung detail lingkungan server Anda, gunakan kombinasi strategi ini untuk mengizinkan permintaan server ke layanan Firebase:
- Kredensial Default Aplikasi (ADC) Google
- File JSON akun layanan
- Token akses OAuth 2.0 berumur pendek yang berasal dari akun layanan
Jika aplikasi Anda berjalan di Compute Engine, Google Kubernetes Engine, App Engine, atau Cloud Functions (termasuk Cloud Functions for Firebase), gunakan Kredensial Default Aplikasi (ADC). ADC menggunakan akun layanan default yang sudah ada untuk mendapatkan kredensial guna mengizinkan permintaan, dan ADC memungkinkan pengujian lokal fleksibel melalui variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS. Untuk otomatisasi alur otorisasi sepenuhnya, gunakan ADC bersama dengan library server Admin SDK.
Jika aplikasi Anda berjalan pada lingkungan server non-Google, Anda harus mendownload file JSON akun layanan dari project Firebase. Selama memiliki akses ke sistem file yang berisi file kunci pribadi, Anda dapat menggunakan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS untuk mengizinkan permintaan dengan kredensial yang diperoleh secara manual ini. Jika tidak memiliki akses ke file tersebut, Anda harus merujuk file akun layanan dalam kode Anda. Lakukan ini dengan sangat hati-hati karena dapat berisiko mengekspos kredensial Anda.
Memberikan kredensial dengan ADC
Kredensial Default Aplikasi (ADC) Google memeriksa kredensial Anda dengan urutan sebagai berikut:
ADC memeriksa apakah variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ditetapkan. Jika variabel ditetapkan, ADC akan menggunakan file akun layanan yang ditunjuk variabel.
Jika variabel lingkungan tidak ditetapkan, ADC akan menggunakan akun layanan default yang disediakan Compute Engine, Google Kubernetes Engine, App Engine, dan Cloud Functions untuk aplikasi yang berjalan pada layanan tersebut.
Jika ADC tidak dapat menggunakan salah satu dari kredensial di atas, sistem akan melemparkan error.
Contoh kode Admin SDK berikut menggambarkan strategi ini. Contoh ini tidak secara eksplisit menentukan kredensial aplikasi. Namun, ADC secara implisit dapat menemukan kredensial asalkan variabel lingkungan ditetapkan, atau asalkan aplikasi berjalan di Compute Engine, Google Kubernetes Engine, App Engine, atau Cloud Functions.
Node.js
admin.initializeApp({
credential: admin.credential.applicationDefault(),
});
Java
FirebaseOptions options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.getApplicationDefault())
.setDatabaseUrl("https://<DATABASE_NAME>.firebaseio.com/")
.build();
FirebaseApp.initializeApp(options);
Python
default_app = firebase_admin.initialize_app()
Go
app, err := firebase.NewApp(context.Background(), nil)
if err != nil {
log.Fatalf("error initializing app: %v\n", err)
}
C#
FirebaseApp.Create(new AppOptions()
{
Credential = GoogleCredential.GetApplicationDefault(),
});
Memberikan kredensial secara manual
Project Firebase mendukung akun layanan Google, yang dapat Anda gunakan untuk memanggil API server Firebase dari server aplikasi atau lingkungan tepercaya. Jika Anda mengembangkan kode secara lokal atau men-deploy aplikasi secara lokal, gunakan kredensial yang diperoleh melalui akun layanan ini untuk mengizinkan permintaan server.
Untuk mengautentikasi akun layanan dan memberinya akses ke layanan Firebase, Anda harus membuat file kunci pribadi dalam format JSON.
Untuk membuat file kunci pribadi untuk akun layanan Anda:
Di Firebase console, buka Settings > Service Accounts.
Klik Generate New Private Key, lalu konfirmasikan dengan mengklik Generate Key.
Simpan dengan aman file JSON yang memuat kunci tersebut.
Saat Anda memberi otorisasi melalui akun layanan, ada dua opsi untuk menyediakan kredensial ke aplikasi. Anda dapat menetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, atau secara eksplisit meneruskan jalur ke kunci akun layanan dalam kode. Opsi pertama lebih aman dan sangat direkomendasikan.
Untuk menetapkan variabel lingkungan:
Tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS ke jalur file JSON yang berisi kunci akun layanan Anda. Variabel ini hanya berlaku untuk sesi shell Anda saat ini. Jadi, jika Anda membuka sesi baru, tetapkan variabel kembali.
Linux atau macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
Dengan PowerShell:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
Setelah Anda menyelesaikan langkah-langkah di atas, Kredensial Default Aplikasi (ADC) secara implisit dapat menentukan kredensial Anda, sehingga Anda dapat menggunakan kredensial akun layanan saat menguji atau beroperasi di lingkungan non-Google.
Menggunakan kredensial untuk membuat token akses
Jika tidak menggunakan Firebase Admin SDK, yang menangani otorisasi secara otomatis, Anda harus membuat token akses dan menambahkannya ke permintaan kirim.
Gunakan kredensial Firebase Anda beserta Library Google Auth untuk bahasa pilihan Anda saat mengambil token akses OAuth 2.0 yang berumur pendek:
node.js
function getAccessToken() {
return new Promise(function(resolve, reject) {
const key = require('../placeholders/service-account.json');
const jwtClient = new google.auth.JWT(
key.client_email,
null,
key.private_key,
SCOPES,
null
);
jwtClient.authorize(function(err, tokens) {
if (err) {
reject(err);
return;
}
resolve(tokens.access_token);
});
});
}
Dalam contoh ini, library klien Google API mengautentikasi permintaan dengan token web JSON, atau yang disebut JWT. Untuk informasi lebih lanjut, baca token web JSON.
Python
def _get_access_token():
"""Retrieve a valid access token that can be used to authorize requests.
:return: Access token.
"""
credentials = service_account.Credentials.from_service_account_file(
'service-account.json', scopes=SCOPES)
request = google.auth.transport.requests.Request()
credentials.refresh(request)
return credentials.token
Java
private static String getAccessToken() throws IOException {
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream("service-account.json"))
.createScoped(Arrays.asList(SCOPES));
googleCredentials.refresh();
return googleCredentials.getAccessToken().getTokenValue();
}
Setelah masa berlaku token akses berakhir, metode refresh token akan otomatis dipanggil untuk mengambil token yang telah diperbarui.
Untuk mengizinkan akses ke FCM, minta cakupan
https://www.googleapis.com/auth/firebase.messaging
.
Untuk menambahkan token akses ke header permintaan HTTP:
Tambahkan token sebagai nilai header Authorization
dalam format Authorization: Bearer <access_token>
:
node.js
headers: {
'Authorization': 'Bearer ' + accessToken
}
Python
headers = {
'Authorization': 'Bearer ' + _get_access_token(),
'Content-Type': 'application/json; UTF-8',
}
Java
URL url = new URL(BASE_URL + FCM_SEND_ENDPOINT);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestProperty("Authorization", "Bearer " + getServiceAccountAccessToken());
httpURLConnection.setRequestProperty("Content-Type", "application/json; UTF-8");
return httpURLConnection;
Memberikan Otorisasi dengan Akun Layanan dari Project yang Berbeda
Anda dapat mengirim pesan untuk satu project ("project target") sambil menggunakan token OAuth 2.0 yang dibuat dari akun layanan di project yang berbeda ("project pengirim"). Dengan demikian, Anda dapat memusatkan pengelolaan akun layanan dalam satu project sambil mengirim pesan atas nama orang lain. Untuk mempelajari cara melakukannya, ikuti langkah-langkah berikut:
- Aktifkan API: Pastikan Firebase Cloud Messaging API diaktifkan di project pengirim.
- Buat Akun Layanan: Buat akun layanan di project pengirim.
- Berikan Izin: Di project target, beri alamat email akun layanan peran Admin Firebase Cloud Messaging API di halaman IAM. Hal ini memungkinkan akun layanan dari project lain mengirim pesan ke project target.
- Dapatkan Token: Buat
token akses OAuth 2.0 untuk akun layanan di project
pengirim. Anda dapat melakukannya dengan:
- Mendownload dan menggunakan file JSON kunci akun layanan.
- Atau, menggunakan Workload Identity jika layanan Anda berjalan di Google Cloud.
- Kirim Permintaan: Gunakan token akses yang diperoleh di header
Authorization
pengiriman permintaan Anda. Permintaan harus dibuat ke endpoint HTTP v1 untuk project target:POST https://fcm.googleapis.com/v1/TARGET_PROJECT_ID/messages:send
Mengirim pesan ke perangkat tertentu
Untuk mengirim ke satu perangkat tertentu, teruskan token pendaftaran perangkat seperti yang ditunjukkan.
REST
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send HTTP/1.1
Content-Type: application/json
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"body":"This is an FCM notification message!",
"title":"FCM Message"
}
}
}
Perintah cURL:
curl -X POST -H "Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA" -H "Content-Type: application/json" -d '{
"message":{
"notification":{
"title":"FCM Message",
"body":"This is an FCM Message"
},
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}}' https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Jika berhasil, respons HTTP v1 API adalah objek JSON yang berisi ID pesan:
{
"name":"projects/myproject-b5ae1/messages/0:1500415314455276%31bd1c9631bd1c96"
}
Mengirim pesan notifikasi pengujian menggunakan FCM HTTP v1 API
Bagian ini menjelaskan cara mengirim pesan notifikasi pengujian menggunakan FCM HTTP v1 API.
URL permintaan HTTP
Permintaan terdiri dari POST HTTP ke target yang ditentukan (token pendaftaran, topik, atau kondisi) di URL berikut:
POST https://fcm.googleapis.com/v1/projectId/messages:send
Contoh JSON permintaan HTTP lengkap
Berikut adalah contoh lengkap yang menunjukkan cara memposting notifikasi dalam permintaan POST HTTP:
{ "message": { "token": REGISTRATION_TOKEN, "notification": { "title": "FCM API test", "body": "This is the body of the notification.", "image": "https://cat.10515.net/1.jpg" } } }
Klik Run untuk mencoba contoh di API Explorer.