C++ ile platformlar arası Firebase Cloud Messaging istemci uygulamanızı 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 bazı ek kurulum 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ı derlemek için CMake'i kullanma önerisi de dahil olmak üzere Firebase C++ SDK'yı kullanmaya yönelik cihaz ve uygulama gereksinimlerini inceleyin.
Proje düzeyindeki
build.gradle
dosyanıza, hembuildscript
hem deallprojects
bölümlerinize Google'ın Maven deposunu eklediğinizden emin olun.
JNI ortamı ve etkinliği ileterek bir Firebase uygulama 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'yi başlatın, uygulamayı ve oluşturulan bir Dinleyici'yi 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 edinmek için Google Play Hizmetleri APK'sını kontrol etme konusuna bakın.
iOS ve üzeri
- Geçerli bir APN sertifikasına ihtiyacınız vardır. Hesabınız yoksa Apple Developer Member Center'da hesap oluşturmayı unutmayın.
- 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:
Push Bildirimleri'ni 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ı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.
Görüntülenen pencerede UserBildirimler.framework'e gidin, ilgili girişi ve ardından Ekle'yi tıklayın.
Bu çerçeve, yalnızca Xcode v8 ve sonraki sürümlerde görünür ve bu kitaplık için gereklidir.
Düzenleyici alanından Özellikler sekmesini seçin.
- Push Bildirimleri'ni Açık olarak ayarlayın.
- Arka Plan Modları'na gidin ve ardından ayarı Açık hale getirin.
- Arka Plan Modları altında Uzaktan bildirimler'i seçin.
Firebase uygulama nesnesi oluşturun:
app = ::firebase::App::Create(::firebase::AppOptions());
firebase::messaging::Listener
arayüzünü uygulayan bir sınıf tanımlayın.Uygulamayı ve oluşturulan bir Dinleyici 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 uygulaması örneği için bir kayıt jetonu istenir. Uygulama, jetonu firebase::messaging::Listener
uygulayan sınıfta tanımlanması gereken OnTokenReceived
geri çağırmalı jetonu alır.
Bu cihazı hedeflemek istiyorsanız bu jetona erişmeniz gerekir.
Android'de ileti teslimi hakkında not
Uygulama hiç çalışmıyorken ve kullanıcı bir bildirime dokunduğunda mesaj, varsayılan olarak FCM'nin yerleşik geri çağırmaları üzerinden yönlendirilmez. Bu durumda, mesaj yükleri uygulamayı başlatmak için kullanılan bir Intent
üzerinden alınır. FCM'nin bu gelen iletileri C++ kitaplığı geri çağırmasına yönlendirmesini sağlamak için Etkinliğinizde 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ı, sistem tepsisi bildirimini doldurmak için kullanılır, ancak bu bildirim içeriği FCM'ye iletilmez. Yani Message::notification
, null olur.
Özet olarak:
Uygulama durumu | Bildirim | Veriler | Her ikisi de |
---|---|---|---|
Ön plan | OnMessageReceived |
OnMessageReceived |
OnMessageReceived |
Genel bilgi | Sistem tepsisi | OnMessageReceived |
Bildirim: sistem tepsisi Veriler: Amacın ekstraları. |
Android'de Özel İleti İş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
öğesini genişleten özel sınıflar yazmanız ve projenizin AndroidManifest.xml
öğesini güncellemeniz gerekir.
ListenerService
yöntemlerini geçersiz kıl.
ListenerService
, uygulamaya gönderilen gelen mesajlara müdahale eden ve bunları C++ kitaplığına yönlendiren Java sınıfıdır. Uygulama ön plandayken (veya uygulama arka planda olduğunda ve yalnızca veri yükü aldığında) mesajlar, bu sınıfta sağlanan geri çağırma işlevlerinden birinden geçer. Mesaj işlemeye özel davranış eklemek için FCM'nin varsayılan ListenerService
kapsamı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 dayalı 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 seyrek kullanılan birkaç yöntem daha sunar.
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
içeriğini güncelle
Özel sınıflarınız yazıldıktan sonra AndroidManifest.xml
içine eklenmelidir. <manifest>
etiketinin içinde uygun özelliği tanımlayarak manifestin 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
öğesini tanımlayan bir AndroidManifest.xml
dosyası bulunmaktadır. Bu manifest normalde projeye özel manifest ile birleştirilir. Bu manifest, ListenerService
çalıştırılabilir. Bu ListenerService
öğesinin özel dinleyici hizmetiyle
değiştirilmesi gerekir. Bu işlem, varsayılan ListenerService
kaldırılıp özel Hizmet eklenerek yapılır. Bu işlem, proje AndroidManifest.xml
dosyanızın aşağıdaki satırları ile 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ümlerinde (7.1.0 sonrası) JobIntentService
kullanılır. Bunun için AndroidManifest.xml
dosyasında ek değişiklikler gerekir.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Otomatik başlatmayı engelle
FCM, cihaz hedefleme için bir kayıt jetonu oluşturur.
Kitaplık, jeton oluşturulduğunda tanımlayıcı ve yapılandırma verilerini Firebase'e yükler. Jetonu kullanmadan önce açık bir etkinleştirme işlemi almak isterseniz FCM'yi (ve Android'de Analytics'i) devre dışı bırakarak yapılandırma sırasında oluşturma işlemini engelleyebilirsiniz. Bunu yapmak için Apple platformlarında Info.plist
öğenize (GoogleService-Info.plist
değil) veya Android'de AndroidManifest.xml
öğenize 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ı araması yapabilirsiniz:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
Bu değer, ayarlandıktan sonra uygulamanın yeniden başlatılmasında da aynı kalır.
Android'de Derin Bağlantı İçeren Mesajları Ele Alma
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ın derin bağlantılarını işleyen etkinliğe yeni bir intent filtresi eklemeniz gerekir. Amaç filtresi, alanınızın derin bağlantılarını yakalamalıdır. Mesajlarınız bir 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. Örnek:
<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ı kurduktan sonra Firebase ile aşağı akış ve konu mesajlarını gönderebilirsiniz. Daha fazla bilgi edinmek için indirebileceğiniz, çalıştırabileceğiniz ve inceleyebileceğiniz hızlı başlangıç örneğinde gösterilen bu işleve göz atın.
Uygulamanıza başka, daha gelişmiş davranışlar eklemek için uygulama sunucusundan mesaj gönderme kılavuzlarına bakın:
Bu özelliklerden yararlanmak için sunucu uygulamasına ihtiyacınız olacağını unutmayın.