HTTP ve XMPP için desteği sonlandırılmış FCM eski API'lerini kullanan uygulamalar HTTP v1 API'yi geri yükleyin. İleti gönderme (yukarı akış mesajları dahil) bu API'lerle şu tarihte kullanımdan kaldırılmıştır: 20 Haziran 2023'te başlayacak ve kapanış 22 Temmuz 2024'te başlayacak.
Etkilenen belirli özellikler hakkında daha fazla bilgi edinin.
HTTP v1 API, devam eden desteğe ve yeni özelliklere ek olarak Eski API'lere göre şu avantajları vardır:
Erişim jetonları ile daha iyi güvenlik HTTP v1 API, kısa ömürlü erişim kullanır jetonları OAuth2 güvenlik modeline göre belirlenmiştir. Google’ın erişim jetonu herkese açık hale gelir ve yalnızca kötü amaçlı olarak kullanılabilir yaklaşık bir saat önce sona erecektir. Yenileme jetonları, kullanılan güvenlik anahtarlarıyla aynı sıklıkta iletilmez olduğundan bunların yakalanma olasılığı çok daha düşüktür.
Farklı platformlarda mesajların daha verimli bir şekilde özelleştirilmesi. Mesaj için body, HTTP v1 API tüm hedeflenen örneklere giden ortak anahtarlara ve platforma özel anahtarlara sahiptir Bu da mesajı farklı platformlarda özelleştirmenizi sağlar. Bu şekilde şunları yapabilirsiniz: "geçersiz kılmalar" oluşturma farklı alanlara biraz farklı yük gönderen tek bir mesajla gönderin.
Yeni istemci platformu sürümleri için daha genişletilebilir ve geleceğe hazır HTTP v1 API; Apple platformları, Android ve Web. Her platformun JSON yükünde kendi tanımlı bloğu olduğundan, FCM, API'yi yeni sürümlere ve yeni platformlara genişletebilir gerekir.
Sunucu uç noktasını güncelleme
HTTP v1 API'nin uç nokta URL'si, bu yöntemler:
- Bu URL'nin sürümü oluşturulmuş ve yolda
/v1
bulunuyor. - Yol, şuna ait Firebase projesinin proje kimliğini içerir:
/projects/myproject-ID/
biçiminde girin. Bu kimlik aşağıdaki dillerde mevcuttur: Genel proje ayarları sekmesinden Firebase konsolu. send
yöntemini açıkça:send
olarak belirtir.
HTTP v1 için sunucu uç noktasını güncellemek üzere bu öğeleri uç noktaya ekleyin ifadesini girin.
Şu tarihten önceki HTTP istekleri:
POST https://fcm.googleapis.com/fcm/send
Şu tarihten önceki XMPP istekleri:
Eski XMPP mesajları, aşağıdaki uç noktaya bir bağlantı üzerinden gönderilir:
fcm-xmpp.googleapis.com:5235
Sonra
POST https://fcm.googleapis.com/v1/projects/myproject-b5ae1/messages:send
Gönderme isteklerinin yetkilendirmesini güncelleme
Eski isteklerde kullanılan sunucu anahtarı dizesinin yerine HTTP v1 gönderme istekleri
OAuth 2.0 erişim jetonu gerektirir. Admin SDK'yı kullanıyorsanız
kitaplığınız, jetonu sizin yerinize işler. Efekt kullanıyorsanız
ham protokolü kullanıyorsanız jetonu bu bölümde açıklandığı şekilde alın ve
Authorization: Bearer <valid Oauth 2.0 token>
olarak üstbilgiyi görürsünüz.
Önce
Authorization: key=AIzaSyZ-1u...0GBYzPu7Udno5aA
Sonra
Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA
İş görüşmelerinizin ayrıntılarına kullanıyorsanız, sunucuyu yetkilendirmek için bu stratejilerin bir kombinasyonunu Firebase hizmetlerine gönderilen istekler:
- Google Uygulaması Varsayılan Kimlik Bilgileri (ADC)
- Hizmet hesabı JSON dosyası
- Bir hizmet hesabından türetilen kısa ömürlü bir OAuth 2.0 erişim jetonu
Uygulamanız Compute Engine işletim sisteminde çalışıyorsa Google Kubernetes Engine, App Engine veya Cloud Functions (Cloud Functions for Firebase dahil) Uygulama Varsayılan Kimlik Bilgilerini (ADC) kullanın. ADC, mevcut varsayılan hizmetinizi kullanır yetkilendirmek için kimlik bilgilerini alması gerektiğini varsayalım. ADC, ortam değişkeni aracılığıyla esnek yerel test GOOGLE_APPLICATION_CREDENTIALS Eksiksiz otomasyondan yararlanmak için Yetkilendirme akışı için ADC'yi Yönetici SDK'sı sunucu kitaplıklarıyla birlikte kullanın.
Uygulamanız Google harici bir sunucu ortamında çalışıyorsa, Firebase projenizden bir hizmet hesabı JSON dosyası indirmeniz gerekir. Örneğin, özel anahtar dosyası oluşturmak için İstekleri yetkilendirmek için GOOGLE_APPLICATION_CREDENTIALS bu bilgileri manuel olarak alabilirsiniz. kodunuzda hizmet hesabı dosyasına referans vermeniz gerekir. kimlik bilgilerinizi ifşa etme riski taşıdığından son derece dikkatli bir şekilde yapılmalıdır.
ADC kullanarak kimlik bilgisi sağlama
Google Uygulaması Varsayılan Kimlik Bilgileri (ADC), kimlik bilgilerinizi kontrol eder şu sırada:
ADC, ortam değişkeninin GOOGLE_APPLICATION_CREDENTIALS ayarlandı. Değişken ayarlanırsa ADC, değişkenin işaret ettiği hizmet hesabı dosyasını kullanır.
Ortam değişkeni belirlenmediyse ADC, varsayılan hizmet hesabını kullanır bu Compute Engine, Google Kubernetes Engine, App Engine, ve Cloud Functions, bu hizmetlerde çalışan uygulamalar sunar.
ADC yukarıdaki kimlik bilgilerinden herhangi birini kullanamazsa sistem bir hata verir.
Aşağıdaki Yönetici SDK'sı kod örneğinde bu strateji gösterilmektedir. Örnek uygulama kimlik bilgilerini açık bir şekilde belirtmez. Ancak ADC, ortam değişkeni ayarlandığı sürece kimlik bilgilerini dolaylı olarak bulabilir veya uygulama Compute Engine işletim sisteminde çalıştığı sürece, Google Kubernetes Engine, App Engine veya 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(),
});
Kimlik bilgilerini manuel olarak sağlayın
Firebase projeleri Google'ı destekler hizmet hesapları kullanıyorsanız Firebase'i çağırmak için kullanabileceğiniz uygulama sunucunuzdaki veya güvenilir ortamınızdaki sunucu API'leri Proje yöneticisi olarak yerel olarak kodlayın veya uygulamanızı şirket içine dağıtın edinilen kimlik bilgilerini kullanabilir bu hizmet hesabını kullanarak sunucu isteklerini yetkilendirebilir.
Bir hizmet hesabının kimliğini doğrulama ve hesabı yetkilendirme Firebase hizmetlerine erişmek için JSON biçiminde bir özel anahtar dosyası oluşturmanız gerekir biçimindedir.
Hizmet hesabınız için özel anahtar dosyası oluşturmak üzere:
Firebase konsolunda şu uygulamayı açın: Ayarlar > Hizmet Hesapları.
Yeni Özel Anahtar Oluştur'u tıklayın ve ardından Anahtar Oluştur'u tıklayarak onaylayın.
Anahtarı içeren JSON dosyasını güvenli bir şekilde depolayın.
Bir hizmet hesabı aracılığıyla yetkilendirme yaparken, uygulamanıza kimlik bilgisi ekleyin. İsterseniz GOOGLE_APPLICATION_CREDENTIALS ortam değişkeni kullanabilirsiniz. hizmet hesabı anahtarının yolunu kodda açıkça iletin. İlk seçenek daha güvenlidir ve kesinlikle önerilir.
Ortam değişkenini ayarlamak için:
GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın hizmet hesabı anahtarınızı içeren JSON dosyasının dosya yoluna. Bu değişken yalnızca mevcut kabuk oturumunuz için geçerlidir. Bu nedenle, yeni bir oturum açmak istiyorsanız değişkeni tekrar ayarlayın.
Linux veya macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
Windows
Powerpoint ile:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
Yukarıdaki adımları tamamladıktan sonra Uygulama Varsayılan Kimlik Bilgileri (ADC) kimlik bilgilerinizi dolaylı yoldan belirleyerek hesap kimlik bilgilerini ele alacağız.
Erişim jetonlarını basmak için kimlik bilgilerini kullanın
Firebase kimlik bilgilerinizi Google Kimlik Doğrulama Kitaplığı kısa ömürlü bir OAuth 2.0 erişim jetonu almak için tercih ettiğiniz dile dokunun:
düğüm.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);
});
});
}
Bu örnekte, Google API istemci kitaplığı isteğin kimliğini JSON web jetonu veya JWT. Daha fazla bilgi için bkz. JSON web jetonları.
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();
}
Erişim jetonunuzun süresi dolduktan sonra jeton yenileme yöntemi çağrılır. otomatik olarak alır.
FCM erişimini yetkilendirmek için kapsamı isteyin
https://www.googleapis.com/auth/firebase.messaging
.
Erişim jetonunu HTTP istek başlığına eklemek için:
Jetonu Authorization
başlığının değeri olarak şu biçimde ekleyin:
Authorization: Bearer <access_token>
:
düğüm.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;
Gönderme isteklerinin yükünü güncelleme
FCM HTTP v1, JSON mesajının yapısında önemli bir değişiklik yaratıyor yük. Öncelikle, bu değişiklikler iletilerin doğru bir şekilde işlenmesini sağlar. Videolarınız farklı müşteri platformlarında alındığında Ayrıca değişiklikler size özelleştirmek için ekstra esneklik ya da "geçersiz kılma" mesaj alanı sayısını artırır.
Bu bölümdeki örnekleri incelemenin yanı sıra bkz. Mesajları farklı platformlarda özelleştirin ve API referansı hakkında bilgi sahibisiniz.
Örnek: basit bildirim mesajı
Burada, çok basit bir bildirim yükünün karşılaştırması verilmiştir.
Yalnızca title
, body
ve data
alanları için geçerlidir. Bu,
farkı vardır.
Önce
{
"to": "/topics/news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
}
}
Sonra
{
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
}
}
}
Örnek: iç içe yerleştirilmiş JSON verileri
Eski mesajlaşma API'sinin aksine HTTP v1 API, data
alanında iç içe yerleştirilmiş JSON değerlerini desteklemez.
JSON'den dizeye dönüşüm gereklidir.
Önce
{
...
"data": {
"keysandvalues": {"key1": "value1", "key2": 123}
}
}
Sonra
{
"message": {
...
"data": {
"keysandvalues": "{\"key1\": \"value1\", \"key2\": 123}"
}
}
}
Örnek: birden fazla platformu hedefleme
Eski API, çoklu platform hedeflemeyi etkinleştirmek için geçersiz kılma işlemleri gerçekleştirdi bu arka uçta yer alır. Buna karşılık HTTP v1, Platformlar arasında fark yaratan, platforma özgü anahtar blokları açık ve geliştirici tarafından görülebilir. Bu strateji, birden fazla aşağıdaki örnekte gösterildiği gibi her zaman tek bir istekle kullanılabilir.
Önce
// Android
{
"to": "/topics/news",
"notification": {
"title": "Breaking News",
"body": "New news story available.",
"click_action": "TOP_STORY_ACTIVITY"
},
"data": {
"story_id": "story_12345"
}
}
// Apple
{
"to": "/topics/news",
"notification": {
"title": "Breaking News",
"body": "New news story available.",
"click_action": "HANDLE_BREAKING_NEWS"
},
"data": {
"story_id": "story_12345"
}
}
Sonra
{
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
},
"android": {
"notification": {
"click_action": "TOP_STORY_ACTIVITY"
}
},
"apns": {
"payload": {
"aps": {
"category" : "NEW_MESSAGE_CATEGORY"
}
}
}
}
}
Örnek: platform geçersiz kılmalarıyla özelleştirme
HTTP v1 API, mesajların platformlar arası hedeflemesini basitleştirmenin yanı sıra mesajları platforma göre özelleştirme esnekliği sunar.
Önce
// Android
{
"to": "/topics/news",
"notification": {
"title": "Breaking News",
"body": "Check out the Top Story.",
"click_action": "TOP_STORY_ACTIVITY"
},
"data": {
"story_id": "story_12345"
}
}
// Apple
{
"to": "/topics/news",
"notification": {
"title": "Breaking News",
"body": "New news story available.",
"click_action": "HANDLE_BREAKING_NEWS"
},
"data": {
"story_id": "story_12345"
}
}
Sonra
{
"message": {
"topic": "news",
"notification": {
"title": "Breaking News",
"body": "New news story available."
},
"data": {
"story_id": "story_12345"
},
"android": {
"notification": {
"click_action": "TOP_STORY_ACTIVITY",
"body": "Check out the Top Story"
}
},
"apns": {
"payload": {
"aps": {
"category" : "NEW_MESSAGE_CATEGORY"
}
}
}
}
}
Örnek: belirli cihazları hedefleme
HTTP v1 API ile belirli cihazları hedeflemek için cihazın
token
anahtarındaki geçerli kayıt jetonunu
to
tuşuna basın.
Önce
{ "notification": {
"body": "This is an FCM notification message!",
"title": "FCM Message"
},
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1..."
}
Sonra
{
"message":{
"token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"notification":{
"body":"This is an FCM notification message!",
"title":"FCM Message"
}
}
}
FCM HTTP v1 API hakkında daha fazla örnek ve bilgi için aşağıdakilere bakın:
HTTP v1 API ile uygulama sunucusu gönderme istekleri oluşturma ile ilgili kılavuz. Tüm "REST" özellikle belirtilmediği sürece snippet'ler v1 API'sını kullanır.