Platformlar arası Firebase Cloud Messaging istemci uygulamanızı C++ ile yazmak için Firebase Cloud Messaging API. 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ıza Google'ın Maven deposu hembuildscript
hem deallprojects
bölüm.
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
parametresini uygulayan bir sınıf tanımlayın kullanır.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, cihazı kontrol etmelidir . Daha fazla bilgi edinmek için: Google Play Hizmetleri APK'sını kontrol edin.
iOS+
- Henüz yapmadıysanız Firebase'i C++ projenize ekleyin. Ardından,
FCM için projenizi ayarlayın:
- Projenizin Podfile dosyasına FCM bağımlılığını ekleyin:
pod 'FirebaseMessaging'
firebase.framework
vefirebase_messaging.framework
sürükleyin çerçeveleri Firebase C++ SDK'sından Xcode projenize ekleyebilirsiniz.
- 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 uygulaması yapılandırması bölümündeki APN kimlik doğrulama anahtarı'nda, Yükle'yi tıklayın. düğmesini tıklayın.
-
Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve Aç. 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:
- 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 gidip aşağı kaydırarak çerçeve eklemek için + düğmesini kullanı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 v8 ve sonraki sürümlerde görünür ve bu kitaplık için gerekli.
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 projeyi ileterek Firebase Cloud Messaging'i başlatın Dinleyici:
::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,
OnTokenReceived
geri çağırması; şunu uygulayan sınıfta tanımlanmalıdır:
firebase::messaging::Listener
.
Bu 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ükü, uygulamayı başlatmak için kullanılan bir Intent
aracılığıyla 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 olacaktır.
Ö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
Uygulamaya gönderilen bildirimler varsayılan olarak ::firebase::messaging::Listener::OnMessageReceived
'e iletilir ancak bazı durumlarda varsayılan davranışı geçersiz kılmak isteyebilirsiniz. Bunu Android'de yapmak için:
daha kapsamlı, daha kapsamlı
com.google.firebase.messaging.cpp.ListenerService
ve
projenin AndroidManifest.xml
.
ListenerService
yöntemlerini geçersiz kıl.
ListenerService
, adresine gönderilen iletileri engelleyen Java sınıfıdır.
C++ kitaplığına yönlendirir. 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. Eklemek istediğiniz
özel bir davranışsa, FCM'ın
varsayılan ListenerService
:
import com.google.firebase.messaging.cpp.ListenerService; class MyListenerService extends ListenerService {
ListenerService.onMessageReceived
yöntemini geçersiz kılarak şunları yapabilirsiniz:
alınan iletişim bilgilerine göre
RemoteMessage
nesnesini tanımlayın ve mesaj verilerini alın:
@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 olması için AndroidManifest.xml
. <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
normalde projeye özel manifest ile birleştirilir. Bu manifesto
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ı engelle
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. Uygunsuz arama sonuçları görmek istiyorsanız
etkinleştirmeyi unutmayın. Jetonu kullanmadan önce
FCM'nin (ve Android'de, Analytics'te) devre dışı bırakılması. Bunu yapmak için
Apple platformlarındaki Info.plist
(GoogleService-Info.plist
değil)
veya Android'deki AndroidManifest.xml
cihazınız:
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 uygulama yeniden başlatılsa bile değişmez.
Android'de derin bağlantılarla 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ı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>
Intent 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 şemanın bağlantısını içeren ve sizi barındıran bir bildirime dokunduğunda belirttiğinizde, uygulamanız, her bir işlemi gerçekleştirmek için etkinliği bu intent filtresiyle bağlantısını tıklayın.
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 özelliklerden yararlanmak için sunucu uygulaması kullanmanız gerektiğini unutmayın.