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. Bazı ek kurulum işlemleri gerekir her platform için geçerli.

Firebase ve FCM SDK'sını ayarlama

Android

  1. Henüz yapmadıysanız Firebase'i C++ projenize ekleyin.

    • Bağlı kurulum talimatlarında cihazı ve uygulamayı inceleyin dahil olmak üzere Firebase C++ SDK'nın CMake'i kullanmanızı öneririz.

    • Proje düzeyindeki build.gradle dosyanıza Google'ın Maven deposu hem buildscript hem de allprojects bölüm.

    ziyaret edin.
  2. JNI ortamında ileterek bir Firebase App nesnesi oluşturun ve Etkinlik:

    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. FCM'yi başlatın, uygulamayı ve oluşturulan bir Dinleyici'yi iletin:

    ::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 ve üzeri

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

    1. Firebase konsolunda projenizin içinde, dişli simgesi, seçin Proje Ayarları'nı tıklayın ve ardından Cloud Messaging sekmesi.

    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 Member Center) oturum açın Yükle.

  3. Push Bildirimleri'ni etkinleştirmek için Xcode projenizi 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. 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.

    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 ardından ayarı Açık hale getirin.
      3. Arka Plan Modları altında Uzaktan bildirimler'i seçin.
  4. Firebase uygulama nesnesi oluşturun:

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

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

  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 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 mesaj, varsayılan olarak FCM'nin yerleşik iletim sistemi üzerinden 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'nin bu gelen aramaları yönlendirmesini sağlamak için iletileri C++ kitaplığı geri çağırmasına bildirirseniz, yöntemi geçersiz kılmanız gerekir. onNewIntent ve Intent öğelerini 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 bu bildirim içeriğinin FCM'ye iletilmeyeceğini lütfen unutmayın. 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 için özel bir davranışsa, FCM'nin 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 dosyası oluşturabilirsiniz.ListenerService 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.

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 etkili hale 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 belirtirseniz, uygulamanız 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.