C++ ile platformlar arası Firebase Cloud Messaging istemci uygulamanızı yazmak için Firebase Cloud Messaging API'sini kullanın. C++ SDK'sı, her iki platform için de çalışır ancak her platformda ek kurulum yapılması gerekir.
Firebase ve FCM SDK'sını ayarlama
Android
Henüz yapmadıysanız Firebase'i C++ projenize ekleyin.
Bağlantılı kurulum talimatlarında, uygulamanızı oluşturmak için CMake kullanma önerisi de dahil olmak üzere Firebase C++ SDK'sını kullanmayla ilgili cihaz ve uygulama gereksinimlerini inceleyin.
Proje düzeyindeki
build.gradle
dosyanızda, Google'ın Maven deposunu hembuildscript
hem deallprojects
bölümüne eklediğinizden emin olun.
JNI ortamını ve Etkinliği ileterek bir Firebase App nesnesi oluşturun:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
firebase::messaging::Listener
arayüzünü uygulayan bir sınıf tanımlayın.FCM öğesini başlatın, App ve oluşturulmuş bir Listener'ı iletin:
::firebase::messaging::Initialize(app, listener);
Google Play Hizmetleri SDK'sını kullanan uygulamalar, özelliklere erişmeden önce cihazda uyumlu bir Google Play Hizmetleri APK'sı olup olmadığını kontrol etmelidir. Daha fazla bilgi için Google Play Hizmetleri APK'sını kontrol etme başlıklı makaleyi inceleyin.
iOS+
- Henüz yapmadıysanız Firebase'i C++ projenize ekleyin. Ardından,
projenizi FCM için ayarlamak üzere:
- Projenizin Podfile'ına FCM bağımlılığını ekleyin:
pod 'FirebaseMessaging'
firebase.framework
vefirebase_messaging.framework
çerçevelerini Firebase C++ SDK'sından Xcode projenize sürükleyin.
- Projenizin Podfile'ına FCM bağımlılığını ekleyin:
APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. Henüz bir APNs kimlik doğrulama anahtarınız yoksa Apple Developer Member Center'da bir tane oluşturduğunuzdan emin olun.
-
Firebase konsolundaki projenizde dişli simgesini, Proje Ayarları'nı ve ardından Cloud Messaging sekmesini seçin.
-
iOS uygulama yapılandırması bölümündeki APNs kimlik doğrulama anahtarı altında, Yükle düğmesini tıklayın.
-
Anahtarınızı kaydettiğiniz konuma gidin, anahtarınızı seçin ve Aç'ı tıklayın. Anahtarın anahtar kimliğini ekleyin ( Apple Developer Member Center'da bulunur) ve Yükle'yi tıklayın.
-
Push bildirimlerini etkinleştirmek için Xcode projenizi yapılandırın:
- Gezgin alanından projeyi seçin.
- Düzenleyici alanından proje hedefini seçin.
Düzenleyici alanı bölümünde Genel sekmesini seçin.
- Bağlı Framework'ler ve Kitaplıklar bölümüne gidin, ardından framework eklemek için + düğmesini tıklayın.
Açılan pencerede UserNotifications.framework'e gidin, bu girişi ve ardından Ekle'yi tıklayın.
Bu çerçeve yalnızca Xcode 8 ve sonraki sürümlerde görünür ve bu kitaplık için gereklidir.
Düzenleyici alanı bölümünde Özellikler sekmesini seçin.
- Push Bildirimleri'ni Açık konuma getirin.
- Arka Plan Modları'na gidin ve Açık olarak değiştirin.
- Arka Plan Modları bölümünde Uzaktan bildirimler'i seçin.
Firebase App nesnesi oluşturun:
app = ::firebase::App::Create(::firebase::AppOptions());
firebase::messaging::Listener
arayüzünü uygulayan bir sınıf tanımlayın.Firebase Cloud Messaging'i başlatın, App ve oluşturulmuş bir Listener'ı iletin:
::firebase::messaging::Initialize(app, listener);
Cihaz kaydı jetonuna erişme
Firebase Cloud Messaging kitaplığı başlatıldığında istemci uygulaması örneği için bir kayıt jetonu istenir. Uygulama, firebase::messaging::Listener
sınıfını uygulayan sınıfta tanımlanması gereken OnTokenReceived
geri çağırma işleviyle jetonu alır.
Söz konusu cihazı hedeflemek istiyorsanız bu jetona erişmeniz gerekir.
Android'de ileti teslimiyle ilgili not
Uygulama hiç çalışmıyorken kullanıcı bir bildirime dokunduğunda mesaj, varsayılan olarak FCM'nın yerleşik geri çağırmaları üzerinden yönlendirilmez. Bu durumda, mesaj yükleri uygulamayı başlatmak için kullanılan bir Intent
aracılığıyla alınır. FCM gelen bu mesajların C++ kitaplığı geri çağırmasına yönlendirilmesi için Etkinliğinizdeki onNewIntent
yöntemini geçersiz kılmanız ve Intent
öğesini MessageForwardingService
öğesine iletmeniz gerekir.
import com.google.firebase.messaging.MessageForwardingService; class MyActivity extends Activity { private static final String TAG = "MyActvity"; @Override protected void onNewIntent(Intent intent) { Log.d(TAG, "A message was sent to this app while it was in the background."); Intent message = new Intent(this, MessageForwardingService.class); message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT); message.putExtras(intent); message.setData(intent.getData()); // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`. // startService(message); MessageForwardingService.enqueueWork(this, message); } }
Uygulama arka plandayken alınan mesajların bildirim alanındaki içerik, sistem tepsisi bildirimini doldurmak için kullanılır ancak bu bildirim içeriği FCM ile paylaşılmaz. Yani,
Message::notification
değeri boş olur.
Özet olarak:
Uygulama durumu | Bildirim | Veriler | İkisi de |
---|---|---|---|
Ön plan | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
Arka plan | Sistem tepsisi | OnMessageReceived |
Bildirim: sistem tepsisi Veriler: Amaç ekstralarında. |
Android'de özel mesaj işleme
Uygulamaya gönderilen bildirimler varsayılan olarak ::firebase::messaging::Listener::OnMessageReceived
'ya iletilir ancak bazı durumlarda varsayılan davranışı geçersiz kılmak isteyebilirsiniz. Android'de bunu yapmak için com.google.firebase.messaging.cpp.ListenerService
sınıfını genişleten özel sınıflar yazmanız ve projenizin AndroidManifest.xml
dosyasını güncellemeniz gerekir.
ListenerService
yöntemlerini geçersiz kılın.
ListenerService
, uygulamaya gönderilen gelen mesajları yakalayan ve bunları C++ kitaplığına yönlendiren Java sınıfıdır. Uygulama ön plandayken (veya uygulama arka plandayken yalnızca veri içeren bir yük aldığında) mesajlar bu sınıfta sağlanan geri çağırmalardan birinden geçer. İleti işlemeye özel davranış eklemek için FCM'nın varsayılan ListenerService
'ını genişletmeniz gerekir:
import com.google.firebase.messaging.cpp.ListenerService; class MyListenerService extends ListenerService {
ListenerService.onMessageReceived
yöntemini geçersiz kılarak, alınan RemoteMessage nesnesine göre işlemler gerçekleştirebilir ve mesaj verilerini alabilirsiniz:
@Override public void onMessageReceived(RemoteMessage message) { Log.d(TAG, "A message has been received."); // Do additional logic... super.onMessageReceived(message); }
ListenerService
, daha az kullanılan birkaç yönteme de sahiptir.
Bunlar da geçersiz kılınabilir. Daha fazla bilgi için FirebaseMessagingService referansına bakın.
@Override public void onDeletedMessages() { Log.d(TAG, "Messages have been deleted on the server."); // Do additional logic... super.onDeletedMessages(); } @Override public void onMessageSent(String messageId) { Log.d(TAG, "An outgoing message has been sent."); // Do additional logic... super.onMessageSent(messageId); } @Override public void onSendError(String messageId, Exception exception) { Log.d(TAG, "An outgoing message encountered an error."); // Do additional logic... super.onSendError(messageId, exception); }
AndroidManifest.xml
uygulamasını güncelle
Özel sınıflarınız yazıldıktan sonra geçerli olmaları için AndroidManifest.xml
içine eklenmeleri gerekir. Manifestin, <manifest>
etiketi içinde uygun özelliği aşağıdaki gibi bildirerek birleştirme araçlarını içerdiğinden emin olun:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.google.firebase.messaging.cpp.samples" xmlns:tools="http://schemas.android.com/tools">
firebase_messaging_cpp.aar
arşivinde, FCM'nin varsayılan ListenerService
'ünü bildiren bir AndroidManifest.xml
dosyası var. Bu manifest normalde projeye özel manifestle birleştirilir. Bu sayede ListenerService
çalışabilir. Bu ListenerService
, özel dinleyici hizmetiyle değiştirilmelidir. Bu işlem, varsayılan ListenerService
kaldırılıp özel hizmet eklenerek gerçekleştirilir. Bu işlem, projelerinizin AndroidManifest.xml
dosyasına aşağıdaki satırlar eklenerek yapılabilir:
<service android:name="com.google.firebase.messaging.cpp.ListenerService" tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service>
Firebase C++ SDK'sının yeni sürümleri (7.1.0 ve sonrası), JobIntentService
kullanır. Bu da AndroidManifest.xml
dosyasında ek değişiklikler yapılmasını gerektirir.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Otomatik başlatmayı önleme
FCM, cihaz hedefleme için bir kayıt jetonu oluşturur.
Kitaplık, jeton oluşturulduğunda tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Jetonu kullanmadan önce açıkça izin almak istiyorsanız FCM'yi (ve Android'de Analytics'i) devre dışı bırakarak yapılandırma sırasında jeton oluşturulmasını engelleyebilirsiniz. Bunu yapmak için Apple platformlarındaki Info.plist
öğenize (GoogleService-Info.plist
öğenize değil) veya Android'deki AndroidManifest.xml
öğenize bir meta veri değeri ekleyin:
Android
<?xml version="1.0" encoding="utf-8"?> <application> <meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" /> </application>
Swift
FirebaseMessagingAutoInitEnabled = NO
FCM'yi yeniden etkinleştirmek için bir çalışma zamanı çağrısı yapabilirsiniz:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
Bu değer, ayarlandıktan sonra uygulama yeniden başlatıldığında da geçerliliğini korur.
Android'de derin bağlantı içeren mesajları işleme
FCM, uygulamanıza derin bağlantı içeren mesajların gönderilmesine olanak tanır. Derin bağlantı içeren mesajlar almak için uygulamanızdaki derin bağlantıları işleyen etkinliğe yeni bir amaç filtresi eklemeniz gerekir. Amaç filtresi, alanınızın derin bağlantılarını yakalamalıdır. İletilerinizde derin bağlantı yoksa bu yapılandırma gerekli değildir. AndroidManifest.xml dosyasında:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/> </intent-filter>
Niyet filtresini daha esnek hale getirmek için joker karakter de belirtebilirsiniz. Örneğin:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="*.example.com" android:scheme="http"/> <data android:host="*.example.com" android:scheme="https"/> </intent-filter>
Kullanıcılar, belirttiğiniz şemaya ve ana makineye bağlantı içeren bir bildirime dokunduğunda uygulamanız, bağlantıyı işlemek için etkinliği bu amaç filtresiyle başlatır.
Sonraki adımlar
İstemci uygulamasını ayarladıktan sonra Firebase ile aşağı akış ve konu mesajları göndermeye hazırsınız. Daha fazla bilgi edinmek için bu işlevin nasıl kullanıldığını gösteren hızlı başlangıç örneğini inceleyin. Bu örneği indirip çalıştırabilir ve inceleyebilirsiniz.
Uygulamanıza daha gelişmiş davranışlar eklemek için uygulama sunucusundan mesaj göndermeyle ilgili kılavuzlara bakın:
Bu özelliklerden yararlanmak için sunucu uygulamasına ihtiyacınız olduğunu unutmayın.