C++ ile bir Firebase Cloud Messaging istemci uygulaması kurun

Platformlar arası Firebase Cloud Messaging istemci uygulamanızı C++ ile yazmak için Firebase Cloud Messaging API'sini kullanın. C++ SDK, hem Android hem de Apple platformları için çalışır ve her platform için bazı ek kurulumlar gerekir.

Firebase ve FCM SDK'yı kurun

Android

  1. 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, hem buildscript hem de allprojects bölümlerinize Google'ın Maven deposunu eklediğinizden emin olun.

  2. JNI ortamından geçen bir Firebase App nesnesi oluşturun ve Activity:

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

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

  4. Uygulamayı ve oluşturulmuş bir Dinleyiciyi geçerek FCM'yi başlatın:

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

  5. 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 etme APK'sına bakın.

iOS+

  1. Geçerli bir APN sertifikasına ihtiyacınız var. Henüz sahip değilseniz, Apple Developer Üye Merkezi'nde bir tane oluşturduğunuzdan emin olun.
  2. Henüz yapmadıysanız, Firebase'i C++ projenize ekleyin . Ardından, projenizi FCM için ayarlamak için:
    1. Projenizin Podfile dosyasına FCM bağımlılığını ekleyin:
      pod 'FirebaseMessaging'
    2. firebase.framework ve firebase_messaging.framework çerçevelerini Firebase C++ SDK'dan Xcode projenize sürükleyin.
  3. Anında Bildirimleri etkinleştirmek için Xcode projenizi yapılandırın:

    1. Gezgin alanından projeyi seçin.
    2. Editör alanından proje hedefini seçin.
    3. Editör alanından Genel sekmesini seçin.

      1. Bağlantılı Çerçeveler ve Kitaplıklar seçeneğine ilerleyin, ardından çerçeve eklemek için + düğmesini tıklayın.
      2. Görünen pencerede UserNotifications.framework'e gidin, o girişi tıklayın 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 tarafından gereklidir.

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

      1. Push Bildirimlerini Açık olarak değiştirin.
      2. Arka Plan Modları'na ilerleyin, ardından Açık olarak değiştirin.
      3. Arka Plan Modları altında Uzak bildirimler'i seçin.
  4. Bir 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 yapılandırılmış bir Dinleyiciyi geçirerek Firebase Cloud Messaging'i başlatın:

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

Cihaz kayıt belirtecine erişin

Firebase Bulut Mesajlaşma kitaplığı başlatıldığında, istemci uygulaması örneği 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.

Söz konusu cihazı hedeflemek istiyorsanız bu simgeye erişmeniz gerekir.

Android'de mesaj teslimi hakkında not

Uygulama hiç çalışmıyorken ve kullanıcı bir bildirime dokunduğunda, mesaj varsayılan olarak FCM'nin yerleşik geri aramaları aracılığıyla yönlendirilmez. Bu durumda, mesaj yükleri, uygulamayı başlatmak için kullanılan bir Intent aracılığıyla alınır. FCM'nin bu gelen mesajları C++ kitaplığı geri çağrısına iletmesi için, Activity'nizdeki 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, sistem tepsisi bildirimini doldurmak için kullanılan bildirim alanlarının içeriğine sahiptir, ancak bu bildirim içeriği FCM'ye iletilmez. Yani, Message::notification boş olacaktır.

Özetle:

Uygulama durumu Bildirim Veri İkisi birden
ön plan OnMessageReceived OnMessageReceived OnMessageReceived
Arka fon Sistem tepsisi OnMessageReceived Bildirim: sistem tepsisi
Veri: niyetin ekstralarında.

Android'de Özel Mesaj İşleme

Varsayılan olarak, uygulamaya gönderilen bildirimler ::firebase::messaging::Listener::OnMessageReceived 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 bunları 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. İleti 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, yürürlüğe girmeleri için AndroidManifest.xml dahil edilmeleri gerekir. <manifest> etiketi 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 bildirim normalde projeye özel bildirimle birleştirilir, bu da ListenerService nasıl çalışabileceğidir. Bu ListenerService cusom dinleyici hizmetiyle değiştirilmesi gerekiyor. Bu, varsayılan ListenerService kaldırarak ve aşağıdaki satırlarla projelerinizin AndroidManifest.xml dosyasıyla yapılabilecek özel Hizmeti ekleyerek gerçekleştirilir:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
tutucu11 l10n-yer
<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 (7.1.0 ve üzeri) yeni sürümleri, 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 onay almak istiyorsanız, FCM'yi (ve Android'de, Analytics'te) 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ı çağrısı yapabilirsiniz:

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

Bu değer, ayarlandıktan sonra uygulama yeniden başlatmaları boyunca devam eder.

FCM, uygulamanıza derin bir bağlantı içeren mesajların gönderilmesine izin verir. Derin bağlantı içeren iletileri almak için uygulamanız için derin bağlantıları işleyen etkinliğe yeni bir amaç filtresi eklemelisiniz. Amaç 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'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>

Amaç 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 bir 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.