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. Bazı ek kurulum işlemleri gerekir her platform için geçerli.
Firebase ve FCM SDK'sını ayarlayın
Android
Henüz yapmadıysanız Firebase'i C++ projenize ekleyin.
Bağlı kurulum talimatlarında cihazı ve uygulamayı inceleyin aşağıdakiler de dahil olmak üzere Firebase C++ SDK'sının kullanımıyla ilgili şartlar: CMake'i kullanmanızı öneririz.
Proje düzeyindeki
build.gradle
dosyanıza Google'ın Maven deposu hembuildscript
hem deallprojects
bölüm.
JNI ortamında ileterek bir Firebase App nesnesi oluşturun ve Etkinlik:
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 ve üzeri
- 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. Halihazırda bir APNs kimlik doğrulama anahtarınız yoksa Apple Geliştirici Üye Merkezi.
-
Firebase konsolunda projenizin içinde, açılır menüden dişli simgesi, seçin Proje Ayarları'nı tıklayın ve ardından Cloud Messaging sekmesi.
-
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 Member Center) oturum açın Yükle.
-
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 gidip aşağı kaydırarak çerçeve eklemek için + düğmesini kullanın.
Görüntülenen pencerede UserBildirimler.framework girişine gidip ilgili girişi tıklayın, ardından Ekle.
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 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
parametresini uygulayan bir sınıf tanımlayın kullanır.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 kayıt jetonu
istemci uygulaması örneği için istendi. 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 ileti teslimi hakkında not
Uygulama hiç çalışmıyorken kullanıcı bir bildirime dokunduğunda
ileti, varsayılan olarak FCM ürününün yerleşik ileti dizisi üzerinden yönlendirilmez
daha fazla bilgi edindiniz. Bu durumda, mesaj yükleri bir Intent
üzerinden alınır
ve uygulamayı başlatmak için kullanılır. FCM tarafından gelen bu bilgilerin yönlendirilmesi için
iletileri C++ kitaplığı geri çağırmasına bildirirseniz, yöntemi geçersiz kılmanız gerekir.
onNewIntent
ekleyin ve Intent
bölümünü
MessageForwardingService
.
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 mesajlarda şu içerikler bulunur:
kullanıcının bildirim alanı, sistem tepsisi bildirimini doldurmak için kullanılır, ancak
söz konusu bildirim içeriğinin FCM adlı kullanıcıya iletilmeyecektir. 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 Veri: Amacın ekstralarında. |
Android'de Özel İleti İşleme
Varsayılan olarak, uygulamaya gönderilen bildirimler
::firebase::messaging::Listener::OnMessageReceived
ancak bazı durumlarda
varsayılan davranışı geçersiz kılmak istediğinizi varsayalım. 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 yalnızca veri yükü aldığında)
mesajları, bu sınıfta sağlanan geri çağırmalardan biri iletilecek. 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 seyrek kullanılan birkaç yöntem daha sunar.
Bunlar da geçersiz kılınabilir. Daha fazla bilgi için
FirebaseMessagingService
bir referans noktası olarak kabul edilir.
@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 dosyasında
<manifest>
etiketi içinde uygun özelliği tanımlayarak araçları birleştirebilirsiniz.
Ö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 AndroidManifest.xml
var
FCM öğesinin varsayılan ListenerService
öğesini tanımlayan dosya. Bu manifest
normalde projeye özel manifest ile birleştirilir. Bu manifesto
ListenerService
çalışabilir. Bu ListenerService
öğesinin şununla değiştirilmesi gerekiyor:
özel dinleme hizmeti sunar. Bu, varsayılan izleme etiketi kaldırılarak gerçekleştirilir
ListenerService
ve özel Hizmeti ekleyerek yapabilirsiniz. Bu işlem
projenizdeki AndroidManifest.xml
dosyanız:
<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 sonrası) için JobIntentService
kullanımı gerekir.
AndroidManifest.xml
dosyasında ek değişiklikler var.
<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,
Firebase'e aktarmanızı sağlar. Müstehcen bir URL
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 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 yeni bir intent filtresi eklemeniz gerekir Ayrıca, uygulamanızın derin bağlantılarını işleyen etkinliğe dair Amaç filtresi Alanınızın derin bağlantılarını yakalayabilir. 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 geniş kapsamlı hâle getirmek için joker karakter belirtmek de mümkündür. daha esnek hale getirebilirsiniz. Ö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ı kurduktan sonra aşağı akış ve Firebase ile mesajlaşmanızı sağlar. Daha fazla bilgi edinmek için, gösterilen bu işleve bakın. hızlı başlangıç örneği indirebileceğiniz, çalıştırabileceğiniz ve inceleyebileceğiniz
Uygulamanıza daha gelişmiş başka davranışlar eklemek için gönderme kılavuzlarına bakın. uygulama sunucusundan gelen mesajlar:
Proje hedeflerinizin yararlanmak için sunucu uygulamasını özellikleri.