Ana içeriğe geç

Android — FCM kurulumu

Android teslimatı Firebase Cloud Messaging'in HTTP v1 API'sini bir service account ile kullanır. Eski /fcm/send server key API'si 2024'te kapatıldı; HTTP v1 tek yol.

A Bölümü — Firebase projesi

1 Firebase console'u açıp Add project (ya da Android uygulamanızın zaten kullandığı projeyi seçin). Google Analytics gerekmez.

2 Projede Get started by adding Firebase to your app altındaki Android simgesine tıklayın.

3 Android package name'i girin (com.acme.shop; app/build.gradle'daki applicationId ile aynı olmalı). Takma ad ve SHA-1 push için isteğe bağlı. Register app.

4 google-services.json'u indirin ve android/app/ içine koyun (modül dizini, build.gradle'ın yanı).

5 Console'un dediği gibi Google services Gradle eklentisini ekleyin:

// android/build.gradle (proje)
buildscript {
dependencies {
classpath "com.google.gms:google-services:4.4.2"
}
}
// android/app/build.gradle (modül)
apply plugin: "com.google.gms.google-services"

(Kotlin DSL: proje düzeyinde id("com.google.gms.google-services") version "4.4.2" apply false, modülde id("com.google.gms.google-services").)

B Bölümü — Service account

6 Project Overview'un yanındaki dişliye → Project settings.

7 Service accounts sekmesini açın. Firebase Admin SDK service account'unu görürsünüz (firebase-adminsdk-xxxxx@<proje>.iam.gserviceaccount.com).

8 Generate new private key, sonra onay diyaloğunda Generate key. Bir JSON dosyası iner (<proje>-firebase-adminsdk-xxxxx-xxxxxxxx.json).

Bu dosya bir kimlik bilgisidir

Elinde olan herkes uygulamanız adına push gönderebilir. Commit'lemeyin, e-postayla göndermeyin. Open Notification yüklerken mühürler ve asla geri vermez.

9 Firebase Cloud Messaging API (V1)'in açık olduğunu doğrulayın: Project settingsCloud Messaging sekmesi → Firebase Cloud Messaging API (V1) Enabled göstermeli. Kapalıysa ⋮ menü → Manage API in Google Cloud ConsoleEnable.

C Bölümü — Open Notification'a yükleme

Panelden — Kimlik bilgileri › FCM — JSON dosyasını seçip Kaydet. Proje kimliği dosyadan okunur.

FCM sekmesi

Ya da komut satırından:

bun run app:create -- --name "Acme" --slug acme \
--fcm-service-account ./acme-shop-prod-firebase-adminsdk.json

D Bölümü — Doğrulama

Bağlantıyı test et'e basın. API service account'tan OAuth2 token alır ve geçersiz token'a validate_only gönderim yapar:

SonuçAnlamı
INVALID_ARGUMENT / UNREGISTEREDGoogle sizi doğruladı; sahte token reddedildi. Hazır.
PERMISSION_DENIEDService account'ta Firebase Cloud Messaging API rolü yok ya da API Google Cloud'da kapalı.
401 / invalid_grantJSON bozuk ya da anahtar console'da silinmiş.

Uygulama tarafı

SDK halleder — bkz. Android SDK ya da React Native — ama iki şey sizde:

  • Tek renkli durum çubuğu simgesi (res/drawable/ic_notification.png, saydam üzerine beyaz). Android başka her şeyi gri kare çizer.
  • Android 13+ POST_NOTIFICATIONS çalışma zamanı izni ister; SDK'lar ister.

Neden data-only mesaj

Sunucu asla FCM notification bloğu göndermez. Yalnızca data gönderir, android.priority: "high" ile:

{
"message": {
"token": "…",
"android": { "priority": "high", "ttl": "259200s", "collapse_key": "daily-streak" },
"data": {
"title": "Yeni eşleşme", "body": "3 kişi seni beğendi",
"image": "https://…", "url": "acme://matches",
"msgId": "<imzalı>", "campaignId": "…",
"actions": "[{\"id\":\"view\",\"title\":\"Gör\"}]",
"sound": "default", "group": "matches"
}
}
}

notification bloğuyla Android uygulama arka plandayken bildirimi kendi çizer ve kodunuz hiç çalışmaz — delivered olayı, özel yerleşim, buton yok. Data-only ile SDK çizer ve üçü de sizde kalır. Bedeli: zorla durdurulmuş uygulamada ya da agresif pil tasarruflu bazı OEM'lerde (Xiaomi, Oppo, vivo) data mesajı işlenmeyebilir. priority: high hafifletir.

Sunucuda hata yönetimi

FCM hatasıWorker
UNREGISTERED, SENDER_ID_MISMATCH, INVALID_ARGUMENT (bozuk token)Abonelik geçersiz kılınır. Asla tekrar denenmez.
QUOTA_EXCEEDED, UNAVAILABLE, INTERNALÜstel backoff, en çok 3 deneme.
THIRD_PARTY_AUTH_ERRORYalnızca iOS'a FCM üzerinden gönderirken anlamlı — Open Notification bunu hiç yapmaz.

Geçişten sonra SENDER_ID_MISMATCH, token'ların yüklediğiniz service account'tan farklı bir Firebase projesine kayıtlı olduğu anlamına gelir.