Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Yetkilendirme istekleri

Uygulama sunucunuzdan veya güvenilir ortamınızdan FCM'ye gönderilen taleplerin yetkilendirilmesi gerekir. Eski HTTP ve HTTP v1 API yetkilendirmesi arasındaki şu önemli farklılıklara dikkat edin:

  • FCM HTTP v1 API, istekleri kısa ömürlü bir OAuth 2.0 erişim jetonuyla yetkilendirir. Bu belirteci basmak için, Google Uygulaması Varsayılan Kimlik Bilgilerini (Google sunucu ortamlarında) kullanabilir ve / veya gerekli kimlik bilgilerini bir hizmet hesabı için oluşturulmuş bir JSON özel anahtar dosyasından manuel olarak alabilirsiniz. İleti göndermek için Firebase Admin SDK kullanıyorsanız jetonu sizin yerinize kitaplık işler.
  • Eski protokoller, yalnızca Firebase konsolundan elde edilen uzun ömürlü API anahtarlarını kullanabilir.

HTTP v1 gönderme isteklerini yetkilendirin

Sunucu ortamınızın ayrıntılarına bağlı olarak, sunucu isteklerini Firebase hizmetlerine yetkilendirmek için şu stratejilerin bir kombinasyonunu kullanın:

  • Google Uygulaması Varsayılan Kimlik Bilgileri (ADC)
  • Bir 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, Kubernetes Engine, App Engine veya Cloud Functions ( Firebase için Cloud Functions dahil) üzerinde çalışıyorsa Uygulama Varsayılan Kimlik Bilgilerini (ADC) kullanın. ADC, istekleri yetkilendirmek için kimlik bilgileri almak üzere mevcut varsayılan hizmet hesabınızı kullanır ve ADC, GOOGLE_APPLICATION_CREDENTIALS ortam değişkeni aracılığıyla esnek yerel test yapılmasını sağlar. Yetkilendirme akışının tam otomasyonu için ADC'yi Admin SDK sunucu kitaplıklarıyla birlikte kullanın.

Uygulamanız Google dışı bir sunucu ortamında çalışıyorsa , Firebase projenizden bir hizmet hesabı JSON dosyası indirmeniz gerekir. Özel anahtar dosyasını içeren bir dosya sistemine erişiminiz olduğu sürece, bu manuel olarak elde edilen kimlik bilgileriyle istekleri yetkilendirmek için GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini kullanabilirsiniz. Bu tür bir dosya erişiminiz yoksa, kodunuzdaki hizmet hesabı dosyasına başvurmalısınız - kimlik bilgilerinizi ifşa etme riski nedeniyle son derece dikkatli olunmalıdır.

ADC kullanarak kimlik bilgilerini sağlayın

Google Uygulaması Varsayılan Kimlik Bilgileri (ADC), kimlik bilgilerinizi aşağıdaki sırayla kontrol eder:

  1. ADC, GOOGLE_APPLICATION_CREDENTIALS ortam değişkeninin ayarlanıp ayarlanmadığını kontrol eder. Değişken ayarlanmışsa, ADC değişkenin işaret ettiği hizmet hesabı dosyasını kullanır.

  2. Ortam değişkeni ayarlanmadıysa ADC, Compute Engine, Kubernetes Engine, App Engine ve Cloud Functions'ın bu hizmetlerde çalışan uygulamalar için sağladığı varsayılan hizmet hesabını kullanır.

  3. ADC yukarıdaki kimlik bilgilerinden hiçbirini kullanamazsa, sistem bir hata atar.

Aşağıdaki Yönetici SDK kodu örneği, bu stratejiyi göstermektedir. Örnek, uygulama kimlik bilgilerini açıkça belirtmez. Ancak ADC, ortam değişkeni ayarlandığı sürece veya uygulama Compute Engine, Kubernetes Engine, App Engine veya Cloud Functions üzerinde çalıştığı sürece kimlik bilgilerini örtük olarak bulabilir.

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()

Git

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, uygulama sunucunuzdan veya güvenilir ortamınızdan Firebase sunucu API'lerini çağırmak için kullanabileceğiniz Google hizmet hesaplarını destekler. Yerel olarak kod geliştiriyorsanız veya uygulamanızı şirket içinde dağıtıyorsanız, sunucu isteklerini yetkilendirmek için bu hizmet hesabı aracılığıyla elde edilen kimlik bilgilerini kullanabilirsiniz.

Bir hizmet hesabının kimliğini doğrulamak ve onu Firebase hizmetlerine erişim yetkisi vermek için JSON biçiminde bir özel anahtar dosyası oluşturmanız gerekir.

Hizmet hesabınız için bir özel anahtar dosyası oluşturmak için:

  1. Firebase konsolunda Ayarlar> Hizmet Hesapları'nı açın .

  2. Yeni Özel Anahtar Oluştur'u tıklayın, ardından Anahtar Oluştur'u tıklayarak onaylayın.

  3. Anahtarı içeren JSON dosyasını güvenli bir şekilde saklayın.

Bir hizmet hesabı aracılığıyla yetkilendirme yaparken, kimlik bilgilerini uygulamanıza sağlamak için iki seçeneğiniz vardır. GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayabilir veya kodda hizmet hesabı anahtarının yolunu açık bir şekilde iletebilirsiniz. İlk seçenek daha güvenlidir ve şiddetle tavsiye edilir.

Ortam değişkenini ayarlamak için:

GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini, hizmet hesabı anahtarınızı içeren JSON dosyasının dosya yoluna ayarlayın. Bu değişken yalnızca mevcut kabuk oturumunuz için geçerlidir, bu nedenle yeni bir oturum açarsanız değişkeni yeniden ayarlayın.

Linux veya macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

pencereler

PowerShell 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 örtük olarak belirleyebilir ve Google dışı ortamlarda test ederken veya çalışırken hizmet hesabı kimlik bilgilerini kullanmanıza olanak tanır.

Erişim belirteçlerini basmak için kimlik bilgilerini kullanın

Yetkilendirmeyi otomatik olarak işleyen Yönetici SDK'sını kullanmıyorsanız, erişim jetonunu basmanız ve istekleri göndermek için eklemeniz gerekir.

Kısa ömürlü bir OAuth 2.0 erişim jetonu almak için tercih ettiğiniz dil için Google API İstemci Kitaplığı ile birlikte Firebase kimlik bilgilerinizi kullanın:

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);
    });
  });
}

Bu örnekte, Google API istemci kitaplığı, isteğin kimliğini bir JSON web jetonu veya JWT ile doğrular. Daha fazla bilgi için JSON web belirteçlerine bakın .

Python

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

Java

private static String getAccessToken() throws IOException {
  GoogleCredential googleCredential = GoogleCredential
      .fromStream(new FileInputStream("service-account.json"))
      .createScoped(Arrays.asList(SCOPES));
  googleCredential.refreshToken();
  return googleCredential.getAccessToken();
}

Erişim jetonunuzun süresi dolduktan sonra, güncellenmiş erişim jetonunu almak için jeton yenileme yöntemi otomatik olarak çağrılır.

FCM'ye erişim yetkisi vermek için https://www.googleapis.com/auth/firebase.messaging kapsamını isteyin.

Erişim belirtecini bir HTTP istek başlığına eklemek için:

Belirteci Authorization başlığının değeri olarak Authorization: Bearer <access_token> biçiminde Authorization: Bearer <access_token> :

node.js

headers: {
  'Authorization': 'Bearer ' + accessToken
}

Python

headers = {
  'Authorization': 'Bearer ' + _get_access_token(),
  'Content-Type': 'application/json; UTF-8',
}

Java

3 sığır eti 62622

Eski protokol gönderme isteklerini yetkilendirin

Eski HTTP protokolüyle, her istekte Firebase konsolu Ayarlar bölmesinin Bulut Mesajlaşma sekmesindeki sunucu anahtarını içermesi gerekir. XMPP için, bir bağlantı kurmak için aynı sunucu anahtarını kullanmanız gerekir.

Eski sunucu anahtarlarını taşıyın

Mart 2020'den itibaren, FCM eski sunucu anahtarları oluşturmayı durdurdu. Mevcut eski sunucu anahtarları çalışmaya devam edecek, ancak bunun yerine Firebase konsolunda Sunucu anahtarı etiketli yeni anahtar sürümünü kullanmanızı öneririz.

Mevcut bir eski sunucu anahtarını silmek isterseniz bunu Google Cloud Console'da yapabilirsiniz .

HTTP isteklerini yetkilendirin

Bir mesaj isteği iki bölümden oluşur: HTTP başlığı ve HTTP gövdesi. HTTP üst bilgisi aşağıdaki başlıkları içermelidir:

  • Authorization : anahtar = YOUR_SERVER_KEY
    Firebase konsolu Ayarlar bölmesinin Bulut Mesajlaşma sekmesinde değeri bulunan sunucu anahtarı olduğundan emin olun. Android, iOS ve tarayıcı anahtarları FCM tarafından reddedilir.
  • Content-Type : application/json için application/json ; application/x-www-form-urlencoded;charset=UTF-8 düz metin için.
    Content-Type , biçimin düz metin olduğu varsayılır.

Örneğin:

Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
  "data" : {
    ...
  },
}

Gönderme istekleri oluşturmayla ilgili tüm ayrıntılar için Gönderme İstekleri Oluştur'a bakın. Eski HTTP Protokol Referansı , mesajınızın içerebileceği tüm parametrelerin bir listesini sağlar.

Bir sunucu anahtarının geçerliliğini kontrol etme

Mesaj gönderirken kimlik doğrulama hataları alırsanız, Sunucu anahtarınızın geçerliliğini kontrol edin. Örneğin, Linux'ta aşağıdaki komutu çalıştırın:

api_key=YOUR_SERVER_KEY

curl --header "Authorization: key=$api_key" \
     --header Content-Type:"application/json" \
     https://fcm.googleapis.com/fcm/send \
     -d "{\"registration_ids\":[\"ABC\"]}"

Bir 401 HTTP durum kodu alırsanız, Sunucu anahtarınız geçerli değildir.

Bir XMPP bağlantısını yetkilendirin

XMPP ile, FCM sunucularına kalıcı, eşzamansız, çift yönlü bir bağlantı sağlayabilirsiniz. Bağlantı, sunucunuz ve kullanıcılarınızın FCM bağlantılı cihazları arasında mesaj göndermek ve almak için kullanılabilir.

FCM ile uzun süreli bir bağlantıyı yönetmek için çoğu XMPP kitaplığını kullanabilirsiniz. XMPP uç noktası fcm-xmpp.googleapis.com:5235 adresinde çalışır. İşlevselliği üretim dışı kullanıcılarla test ederken, bunun yerine fcm-xmpp.googleapis.com:5236 adresindeki üretim öncesi sunucuya fcm-xmpp.googleapis.com:5236 (farklı bağlantı noktasını not edin).

Ön üretim üzerinde düzenli testler (en son FCM yapılarının çalıştığı daha küçük bir ortam), gerçek kullanıcıları test kodundan ayırmak için faydalıdır. fcm-xmpp.googleapis.com:5236 bağlanan test cihazları ve test kodu, üretim kullanıcılarına test mesajları gönderme veya test bağlantıları üzerinden üretim trafiğinden yukarı akış mesajları gönderme risklerinden kaçınmak için farklı bir FCM gönderen kimliği kullanmalıdır.

Bağlantının iki önemli gereksinimi vardır:

  • Bir Taşıma Katmanı Güvenliği (TLS) bağlantısı başlatmalısınız. FCM'nin şu anda STARTTLS uzantısını desteklemediğini unutmayın.
  • FCM, parola olarak <your_FCM_Sender_Id>@fcm.googleapis.com (FCM gönderen kimliği ) ve Sunucu anahtarını kullanan bir SASL PLAIN kimlik doğrulama mekanizması gerektirir. Bu değerler, Firebase konsolu Ayarlar bölmesinin Bulut Mesajlaşma sekmesinde bulunur.

Herhangi bir noktada bağlantı başarısız olursa, hemen yeniden bağlanmalısınız. Kimlik doğrulamasından sonra gerçekleşen bir bağlantı kesildikten sonra geri çekilmeye gerek yoktur. Her gönderici kimliği için FCM, paralel olarak 2500 bağlantıya izin verir.

Aşağıdaki parçacıklar, FCM'ye bir XMPP bağlantısı için kimlik doğrulama ve yetkilendirmenin nasıl gerçekleştirileceğini göstermektedir.

XMPP sunucusu

XMPP sunucusu, FCM'ye bağlantı istiyor

<stream:stream to="fcm.googleapis.com"
        version="1.0" xmlns="jabber:client"
        xmlns:stream="http://etherx.jabber.org/streams">

FCM

FCM bağlantıyı açar ve PLAIN yöntemi dahil olmak üzere bir kimlik doğrulama mekanizması ister.

<stream:features>
  <mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
    <mechanism>X-OAUTH2</mechanism>
    <mechanism>X-GOOGLE-TOKEN</mechanism>
    <mechanism>PLAIN</mechanism>
  </mechanisms>
</stream:features>

XMPP sunucusu

XMPP sunucusu, Firebase konsolu Ayarlar bölmesinin Bulut Mesajlaşma sekmesinden sunucu anahtarını sağlayarak PLAIN kimlik doğrulama yöntemini kullanarak yanıt vermelidir.

<auth mechanism="PLAIN"
xmlns="urn:ietf:params:xml:ns:xmpp-sasl">MTI2MjAwMzQ3OTMzQHByb2plY3RzLmdjbS5hb
mFTeUIzcmNaTmtmbnFLZEZiOW1oekNCaVlwT1JEQTJKV1d0dw==</auth>

FCM

<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

XMPP sunucusu

<stream:stream to="fcm.googleapis.com"
        version="1.0" xmlns="jabber:client"
        xmlns:stream="http://etherx.jabber.org/streams">

FCM

<stream:features>
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"/>
  <session xmlns="urn:ietf:params:xml:ns:xmpp-session"/>
</stream:features>

XMPP sunucusu

<iq type="set">
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"></bind>
</iq>

FCM

<iq type="result">
  <bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
    <jid>SENDER_ID@fcm.googleapis.com/RESOURCE</jid>
  </bind>
</iq>

Not: FCM, iletileri yönlendirirken bağlı kaynağı kullanmaz.

Gönderme istekleri oluşturmayla ilgili tüm ayrıntılar için Gönderme İstekleri Oluştur'a bakın. Eski XMPP Protokol Başvurusu , mesajınızın içerebileceği tüm parametrelerin bir listesini sağlar.