C++ ile Firebase Cloud Messaging istemci uygulaması kurma

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

  1. 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 hem buildscript hem de allprojects bölüm.

  2. JNI ortamını ve etkinliği ileterek bir Firebase App nesnesi oluşturun:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. firebase::messaging::Listener parametresini uygulayan bir sınıf tanımlayın kullanır.

  4. Uygulamayı ve oluşturulan bir Dinleyici'yi ileterek FCM uygulamasını başlatın:

    ::firebase::messaging::Initialize(app, listener);

  5. 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+

  1. Henüz yapmadıysanız Firebase'i C++ projenize ekleyin. Ardından, FCM için projenizi ayarlayın:
    1. Projenizin Podfile dosyasına FCM bağımlılığını ekleyin:
      pod 'FirebaseMessaging'
    2. firebase.framework ve firebase_messaging.framework sürükleyin çerçeveleri Firebase C++ SDK'sından Xcode projenize ekleyebilirsiniz.
  2. 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.

    1. Firebase Konsolu'ndaki projenizde dişli simgesini, ardından Proje Ayarları'nı ve Cloud Mesajlaşma sekmesini seçin.

    2. 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.

    3. Anahtarınızı kaydettiğiniz konuma gidin, anahtarı seçin ve . Anahtarın anahtar kimliğini ekleyin ( Apple Developer Üye Merkezi'nde bulunur) ve Yükle'yi tıklayın.

  3. Xcode projenizi Push bildirimlerini etkinleştirecek şekilde yapılandırın:

    1. Gezgin alanından projeyi seçin.
    2. Düzenleyici alanından proje hedefini seçin.
    3. Düzenleyici alanından Genel sekmesini seçin.

      1. Bağlı Çerçeveler ve Kitaplıklar'a gidip aşağı kaydırarak çerçeve eklemek için + düğmesini kullanın.
      2. 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.

    4. Düzenleyici alanından Özellikler sekmesini seçin.

      1. Push Bildirimleri'ni Açık olarak ayarlayın.
      2. Arka Plan Modları'na gidin ve Açık'a getirin.
      3. Arka Plan Modları altında Uzaktan bildirimler'i seçin.
  4. Firebase uygulaması nesnesi oluşturun:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. firebase::messaging::Listener arabirimini uygulayan bir sınıf tanımlayın.

  6. 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.

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.