Platformlar arası Firebase Cloud Messaging istemci uygulamanızı C++ ile yazmak için Firebase Cloud Messaging API'yi kullanın. C++ SDK'sı hem Android hem de Apple platformlarında çalışır. Her platform için ek kurulum gerekir.
Firebase ve FCM SDK'sını ayarlama
Android
Henüz yapmadıysanız Firebase'i C++ projenize ekleyin.
Bağlı kurulum talimatlarında, uygulamanızı oluşturmak için CMake'i kullanma önerisi de dahil olmak üzere Firebase C++ SDK'sını kullanmayla ilgili cihaz ve uygulama koşullarını inceleyin.
Proje düzeyindeki
build.gradle
dosyanızda, Google'ın Maven deposunu hembuildscript
hem deallprojects
bölümlerinize 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
arabirimini uygulayan bir sınıf tanımlayın.Uygulamayı ve oluşturulan bir Dinleyici'yi ileterek FCM uygulamasını başlatın:
::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 dosyası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 dosyasına FCM bağımlılığını ekleyin:
APNs kimlik doğrulama anahtarınızı Firebase'e yükleyin. APN kimlik doğrulama anahtarınız yoksa Apple Developer Üye Merkezi'nde bir anahtar oluşturduğunuzdan emin olun.
-
Firebase Konsolu'ndaki projenizde dişli simgesini, ardından Proje Ayarları'nı ve Cloud Mesajlaşma sekmesini seçin.
-
iOS uygulama yapılandırması bölümündeki APNs kimlik doğrulama anahtarı'nda Yükle düğmesini tıklayın.
-
Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve Aç'ı tıklayın. Anahtarın anahtar kimliğini ekleyin ( Apple Developer Üye Merkezi'nde bulunur) ve Yükle'yi tıklayın.
-
Xcode projenizi Push bildirimlerini etkinleştirecek şekilde yapılandırın:
- Gezinme alanından projeyi seçin.
- Düzenleyici alanından proje hedefini seçin.
Düzenleyici alanından Genel sekmesini seçin.
- Bağlı Çerçeveler ve Kitaplıklar'a gidin ve çerçeve eklemek için + düğmesini tıklayın.
Açılan pencerede UserNotifications.framework'a 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 tarafından gereklidir.
Düzenleyici alanından Özellikler sekmesini seçin.
- Push Bildirimleri'ni Açık olarak ayarlayın.
- Arka Plan Modları'na gidin ve Açık'a getirin.
- Arka Plan Modları altında Uzaktan bildirimler'i seçin.
Firebase uygulaması nesnesi oluşturun:
app = ::firebase::App::Create(::firebase::AppOptions());
firebase::messaging::Listener
arabirimini uygulayan bir sınıf tanımlayın.Uygulamayı ve oluşturulan bir Dinleyici'yi ileterek Firebase Cloud Messaging'i başlatın:
::firebase::messaging::Initialize(app, listener);
Cihaz kayıt jetonuna erişme
Firebase Cloud Messaging kitaplığı başlatıldıktan sonra istemci uygulama örneği için bir kayıt jetonu istenir. Uygulama, jetonu OnTokenReceived
geri çağırma işleviyle alır. Bu işlev, firebase::messaging::Listener
'u uygulayan sınıfta tanımlanmalıdır.
Belirli bir cihazı hedeflemek istiyorsanız bu jetona erişmeniz gerekir.
Android'de mesaj teslimiyle ilgili not
Uygulama hiç çalışmadığında ve bir kullanıcı bir bildirime dokunduğunda, mesaj varsayılan olarak FCM'ın yerleşik geri çağırma işlevleri üzerinden yönlendirilmez. Bu durumda, mesaj yükleri uygulamayı başlatmak için kullanılan bir Intent
üzerinden alınır. FCM'ün bu gelen mesajları C++ kitaplığı geri çağırma işlevine iletmesi için Etkinliğinizde onNewIntent
yöntemini geçersiz kılmanız ve Intent
öğesini MessageForwardingService
'a 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 tepsisinde bildirim oluşturmak için kullanılır ancak bu bildirim içeriği FCM'e iletilmez. Yani Message::notification
null olur.
Özet olarak:
Uygulama durumu | Bildirim | Veriler | İkisi de |
---|---|---|---|
Ön plan | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
Arka plan | Sistem tepsisi | OnMessageReceived |
Bildirim: sistem tepsisi Veriler: intent'in ekstralarında. |
Android'de Özel Mesaj İşleme
Varsayılan olarak, uygulamaya gönderilen bildirimler ::firebase::messaging::Listener::OnMessageReceived
uygulamasına 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.
ListenerService
, uygulamaya gönderilen gelen mesajları yakalayıp C++ kitaplığına yönlendiren Java sınıfıdır. Uygulama ön plandayken (veya uygulama arka plandayken ve yalnızca veri yüklü bir mesaj aldığında) mesajlar bu sınıfta sağlanan geri çağırmalardan birinden geçer. Mesaj işlemeye özel davranış eklemek için FCM'ın varsayılan ListenerService
özelliğini 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 yapabilir 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 başka yöntemlere 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 eklenmelidir. <manifest>
etiketinde uygun özelliği açıklayarak manifest'in birleştirme araçlarını içerdiğinden emin olun. Örneğin:
<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
değerini belirten bir AndroidManifest.xml
dosyası vardır. Bu manifest genellikle projeye özel manifest ile birleştirilir. Bu sayede ListenerService
çalışabilir. Bu ListenerService
, özel dinleyici hizmetiyle değiştirilmelidir. Bu, varsayılan ListenerService
kaldırılarak ve özel Hizmet eklenerek yapılır. Bu işlem, projenizin AndroidManifest.xml
dosyasında aşağıdaki satırlarla 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 sonraki sürümler) 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.
Bir jeton oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Jetonu kullanmadan önce açık bir katılım almak istiyorsanız FCM'yi (ve Android'de Analytics'i) devre dışı bırakarak yapılandırırken jeton oluşturulmasını önleyebilirsiniz. Bunu yapmak için Apple platformlarındaki Info.plist
(GoogleService-Info.plist
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 çalışma zamanında çağrı yapabilirsiniz:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
Bu değer, ayarlandıktan sonra uygulama yeniden başlatılsa bile değişmez.
Android'de Mesajlar'ı derin bağlantılarla kullanma
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ız için derin bağlantıları işleyen etkinliğe yeni bir intent filtresi eklemeniz gerekir. Intent filtresi, alanınızın derin bağlantılarını yakalamalıdır. Mesajlarınız derin bağlantı içermiyorsa 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>
Amaç filtresini daha esnek hale getirmek için joker karakter belirtmek de mümkündür. Ö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 şema ve ana makinenin bağlantısını içeren bir bildirime dokunduğunda uygulamanız bağlantıyı işlemek için bu intent filtresiyle etkinliği başlatır.
Sonraki adımlar
İstemci uygulamasını ayarladıktan sonra Firebase ile yayın mesajları ve konu mesajları göndermeye hazırsınız demektir. Daha fazla bilgi edinmek için bu işlevin, indirip çalıştırabileceğiniz ve inceleyebileceğiniz hızlı başlangıç örneğinde gösterildiğine göz atın.
Uygulamanıza daha gelişmiş başka davranışlar eklemek için uygulama sunucusundan mesaj göndermeyle ilgili kılavuzlara bakın:
Bu özellikleri kullanabilmek için sunucu uygulaması kullanmanız gerektiğini unutmayın.