Platformlar arası Firebase Cloud Messaging istemci uygulamanızı C++ ile yazmak için Firebase Cloud Messaging API'yi kullanın. C++ SDK, hem Android hem de Apple platformlarında çalışır ve her platform için bazı ek kurulumlar gerekir.
Firebase ve FCM SDK'yı kurun
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'yı kullanmak için cihaz ve uygulama gereksinimlerini inceleyin.
Proje düzeyindeki
build.gradle
dosyanızda, hembuildscript
hem deallprojects
bölümlerinize Google'ın Maven deposunu eklediğinizden emin olun.
JNI ortamında ve Activity:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
geçen bir Firebase Uygulaması nesnesi oluşturunfirebase::messaging::Listener
arabirimini uygulayan bir sınıf tanımlayın.Uygulamada ve oluşturulmuş bir Dinleyicide geçerek FCM'yi başlatın:
::firebase::messaging::Initialize(app, listener);
Google Play hizmetleri SDK'sına dayanan 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 hizmetlerini kontrol et APK'sına bakın.
iOS+
- Geçerli bir APNs sertifikasına ihtiyacınız var. Halihazırda bir hesabınız yoksa, Apple Developer Üye Merkezi'nde bir tane oluşturduğunuzdan emin olun.
- Henüz yapmadıysanız, Firebase'i C++ projenize ekleyin . Ardından, projenizi FCM için ayarlamak üzere:
- Projenizin Pod dosyasına FCM bağımlılığını ekleyin:
pod 'FirebaseMessaging'
-
firebase.framework
vefirebase_messaging.framework
çerçevelerini Firebase C++ SDK'dan Xcode projenize sürükleyin.
- Projenizin Pod dosyasına FCM bağımlılığını ekleyin:
Push Bildirimlerini etkinleştirmek için Xcode projenizi yapılandırın:
- Gezgin alanından projeyi seçin.
- Editör alanından proje hedefini seçin.
Düzenleyici alanından Genel sekmesini seçin.
- Bağlantılı Çerçeveler ve Kitaplıklar'a ilerleyin, ardından çerçeve eklemek için + düğmesini tıklayın.
Görünen pencerede UserNotifications.framework'e gidin, o girişi tıklayın, ardından Ekle'yi tıklayın.
Bu çerçeve yalnızca Xcode v8 ve sonrasında görünür ve bu kitaplık için gereklidir.
Düzenleyici alanından Yetenekler sekmesini seçin.
- Push Bildirimlerini Açık olarak değiştirin.
- Arka Plan Modları'na ilerleyin, ardından Açık olarak değiştirin.
- Arka Plan Modları altında Uzak bildirimler'i seçin.
Bir Firebase Uygulaması nesnesi oluşturun:
app = ::firebase::App::Create(::firebase::AppOptions());
firebase::messaging::Listener
arabirimini uygulayan bir sınıf tanımlayın.Firebase Cloud Messaging'i Başlatın, Uygulamayı ve oluşturulmuş bir Dinleyiciyi geçirin:
::firebase::messaging::Initialize(app, listener);
Cihaz kayıt belirtecine erişin
Firebase Cloud Messaging kitaplığı başlatıldıktan sonra, istemci uygulaması eşgörünümü için bir kayıt belirteci istenir. Uygulama, belirteci, firebase::messaging::Listener
uygulayan sınıfta tanımlanması gereken OnTokenReceived
geri aramasıyla alacaktır.
Belirli bir cihazı hedeflemek istiyorsanız, bu jetona erişmeniz gerekir.
Android'de mesaj teslimi hakkında not
Uygulama hiç çalışmıyorken ve bir kullanıcı bir bildirime dokunduğunda, mesaj varsayılan olarak FCM'nin yerleşik geri aramaları aracılığıyla yönlendirilmez. Bu durumda, ileti yükleri, uygulamayı başlatmak için kullanılan bir Intent
yoluyla alınır. FCM'nin bu gelen iletileri C++ kitaplığı geri aramasına iletmesi için Activity'nizde onNewIntent
yöntemini geçersiz kılmanız ve Intent
MessageForwardingService
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 alanlarının içeriği, sistem tepsisi bildirimini doldurmak için kullanılır, ancak bu bildirim içeriği FCM'ye iletilmez. Yani, Message::notification
bir boş olacaktır.
Özetle:
Uygulama durumu | Bildiri | Veri | İkisi birden |
---|---|---|---|
ön plan | OnMessageReceived | OnMessageReceived | OnMessageReceived |
Arka plan | Sistem tepsisi | OnMessageReceived | Bildirim: sistem tepsisi Veri: amacın ekstralarında. |
Android'de Özel Mesaj İşleme
Varsayılan olarak, uygulamaya gönderilen bildirimler ::firebase::messaging::Listener::OnMessageReceived
öğesine iletilir, ancak bazı durumlarda varsayılan davranışı geçersiz kılmak isteyebilirsiniz. Bunu Android'de yapmak için com.google.firebase.messaging.cpp.ListenerService
genişleten özel sınıflar yazmanız ve projenizin AndroidManifest.xml
güncellemeniz gerekir.
ListenerService
Yöntemlerini geçersiz kıl.
ListenerService
, uygulamaya gönderilen gelen mesajları yakalayan ve onları C++ kitaplığına yönlendiren Java sınıfıdır. Uygulama ön planda olduğunda (veya uygulama arka planda olduğunda ve yalnızca veri yükü aldığında), mesajlar bu sınıfta sağlanan geri aramalardan birinden geçer. Mesaj işlemeye özel davranış eklemek için, FCM'nin varsayılan ListenerService
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ı eylemler 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
ayrıca daha az kullanılan birkaç başka 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
güncelleyin
Özel sınıflarınız yazıldıktan sonra, etkin olmaları için AndroidManifest.xml
dosyasına dahil edilmeleri gerekir. <manifest>
etiketinin içinde uygun özniteliği şu şekilde bildirerek bildirimin 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
değerini bildiren bir AndroidManifest.xml
dosyası vardır. Bu manifesto normalde, ListenerService
nasıl çalışabildiği projeye özel manifesto ile birleştirilir. Bu ListenerService
özel dinleyici hizmetiyle değiştirilmesi gerekiyor. Bu, varsayılan ListenerService
kaldırarak ve projelerinizin AndroidManifest.xml
dosyasına aşağıdaki satırlarla yapılabilecek özel Hizmeti ekleyerek gerçekleştirilir:
<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'nın yeni sürümleri (7.1.0 sonrası), AndroidManifest.xml
dosyasında ek değişiklikler gerektiren JobIntentService
kullanır.
<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 belirteci oluşturur. Bir belirteç oluşturulduğunda kitaplık, tanımlayıcıyı ve yapılandırma verilerini Firebase'e yükler. Belirteci kullanmadan önce açık bir katılım almak istiyorsanız, FCM'yi (ve Android'de, Analytics'i) devre dışı bırakarak yapılandırma zamanında oluşturmayı önleyebilirsiniz. Bunu yapmak için, Apple platformlarında Info.plist
( GoogleService-Info.plist
değil) veya Android'de AndroidManifest.xml
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>
Süratli
FirebaseMessagingAutoInitEnabled = NO
FCM'yi yeniden etkinleştirmek için bir çalışma zamanı araması yapabilirsiniz:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
Bu değer, ayarlandıktan sonra uygulama yeniden başlatmalarında devam eder.
Android'de Derin Bağlantılarla Mesajları Yönetme
FCM, uygulamanıza derin bir bağlantı içeren mesajların gönderilmesine izin verir. Derin bağlantı içeren mesajları almak için, uygulamanız için derin bağlantıları işleyen etkinliğe yeni bir amaç filtresi eklemelisiniz. Niyet 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'de:
<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 bir 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 şemaya ve ana bilgisayara bağlantı içeren bir bildirime dokunduğunda, uygulamanız bağlantıyı işlemek için bu amaç filtresiyle etkinliği başlatır.
Sonraki adımlar
İstemci uygulamasını kurduktan sonra, Firebase ile aşağı akış ve konu mesajları göndermeye hazırsınız. Daha fazla bilgi edinmek için indirebileceğiniz, çalıştırabileceğiniz ve gözden geçirebileceğiniz hızlı başlangıç örneğinde gösterilen bu işlevselliğe bakın.
Uygulamanıza başka, daha gelişmiş davranışlar eklemek için bir uygulama sunucusundan mesaj gönderme kılavuzlarına bakın:
Bu özelliklerden yararlanmak için bir sunucu uygulamasına ihtiyacınız olacağını unutmayın.