Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

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

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

Firebase ve FCM SDK'yı kurma

Android

  1. Henüz yapmadıysanız, C ++ projenize Firebase 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, Google'ın Maven deposunu hem buildscript hem de tüm allprojects bölümlerine buildscript emin olun.

  2. JNI ortamına ve Etkinliğine iletilen bir Firebase App nesnesi oluşturun:

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

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

  4. Uygulamaya ve oluşturulmuş bir Dinleyiciye 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 hizmetleri APK'sını kontrol etme bölümüne bakın.

iOS

  1. Geçerli bir APN sertifikasına ihtiyacınız var. Henüz bir hesabınız yoksa APN'lerin SSL Sertifikalarını Sağlama konusuna bakın.
  2. Henüz yapmadıysanız, C ++ projenize Firebase ekleyin . Ardından, projenizi FCM için ayarlamak için:
    1. Projenizin Pod dosyasına, FCM bağımlılığını ekleyin:
      pod 'Firebase/Messaging'
    2. firebase.framework ve firebase_messaging.framework çerçevelerini firebase_messaging.framework C ++ SDK'sından Xcode projenize sürükleyin.
  3. Xcode projenizi Anlık Bildirimleri etkinleştirecek şekilde 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 Kütüphaneler'e gidin , ardından çerçeve eklemek için + düğmesini tıklayın.
      2. Göründüğünde, UserNotifications.framework gidin Bu pencerede, o zaman, bu girişi tıklayın Add tıklayın.

        Bu çerçeve yalnızca Xcode v8 ve sonraki sürümlerinde görünür ve bu kütüphane için gereklidir.

    4. Editör alanından Yetenekler sekmesini seçin.

      1. Anlık Bildirimleri Açık olarak değiştirin .
      2. Arka Plan Modları'na gidin, ardından Açık olarak değiştirin .
      3. Arka Plan Modları altında Uzaktan bildirimler'i seçin.
  4. Bir Firebase App nesnesi oluşturun:

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

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

  6. Uygulamaya ve oluşturulmuş bir Dinleyiciye ileterek Firebase Bulut Mesajlaşmasını başlatın:

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

Cihaz kayıt jetonuna erişin

Firebase Cloud Messaging kütüphanesini başlattıktan sonra, istemci uygulaması örneği için bir kayıt jetonu istenir. Uygulama, firebase::messaging::Listener uygulayan sınıfta tanımlanması gereken OnTokenReceived geri OnTokenReceived jetonu alacaktır.

Belirli bir cihazı hedeflemek istiyorsanız, bu simgeye erişmeniz gerekir.

Android'de mesaj teslimi hakkında not

Uygulama hiç çalışmıyorsa ve bir kullanıcı bir bildirime dokunduğunda mesaj varsayılan olarak FCM'nin yerleşik geri aramalarından yönlendirilmez. Bu durumda, mesaj yükleri uygulamayı başlatmak için kullanılan bir Intent yoluyla alınır. onNewIntent bu gelen iletileri C ++ kitaplığı geri onNewIntent sağlamak için, Etkinliğinizdeki onNewIntent yöntemini geçersiz onNewIntent ve Intent MessageForwardingService onNewIntent 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());
    startService(message);
  }
}

Uygulama arka plandayken alınan iletiler, sistem tepsisi bildirimini doldurmak için 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 Her ikisi de
ö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 projeler yazmanız ve projenizin AndroidManifest.xml güncellemeniz gerekir.

ListenerService Yöntemlerini Geçersiz Kıl.

ListenerService , uygulamaya gönderilen gelen iletileri engelleyen 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), iletiler 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 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 güncelleyin

Özel sınıflarınız yazıldıktan sonra, bunların etkili olması için AndroidManifest.xml eklenmesi gerekir. Manifest'in <manifest> etiketinin içindeki uygun özniteliği şöyle bildirerek 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 firebase_messaging_cpp.aar varsayılan ListenerService bildiren bir AndroidManifest.xml dosyası vardır. Bu bildirim normalde ListenerService çalışabildiği projeye özgü bildirimle birleştirilir. Bu ListenerService , cusom dinleyici servisiyle değiştirilmelidir. Bu, varsayılan ListenerService kaldırılarak ve aşağıdaki satırlarla projelerinizin AndroidManifest.xml dosyasıyla yapılabilen ö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>

Otomatik başlatmayı önle

FCM, FCM içinde bir kayıt belirteci olarak kullanılan bir Örnek Kimliği oluşturur. Bir Örnek Kimliği oluşturulduğunda kütüphane tanımlayıcı ve yapılandırma verilerini Firebase'e yükleyecektir.Örnek Kimliği'ni kullanmadan önce açık bir tercih almak istiyorsanız, FCM'yi (ve Android, Analytics) devre dışı bırakarak yapılandırma zamanında oluşturmayı engelleyebilirsiniz. . Bunu yapmak için GoogleService-Info.plist Info.plist ( GoogleService-Info.plist ) 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>

iOS

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ında 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 niyet filtresi eklemeniz gerekir. Amaç filtresi, alan adınızın derin bağlantılarını yakalamalıdır. İletileriniz derin bir 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 bağlantı içeren bir bildirime dokunduğunda, uygulamanız bağlantıyı işlemek için bu niyet filtresiyle etkinliği başlatır.

Sonraki adımlar

İstemci uygulamasını ayarladıktan sonra, Firebase ile aşağı ve konu mesajları göndermeye hazırsınız. Daha fazla bilgi edinmek için, indirebileceğiniz, çalıştırabileceğiniz ve inceleyebileceğ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 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.