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ı kurun

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 iOS 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 kullanımına yönelik cihaz ve uygulama gereksinimlerini inceleyin.

    • Proje düzeyindeki build.gradle dosyanızda, hem buildscript hem de allprojects bölümlerinize Google'ın Maven deposunu dahil ettiğinizden emin olun.

  2. JNI ortamını ve Activity:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
    'yi geçirerek bir Firebase Uygulaması nesnesi oluşturun

  3. firebase::messaging::Listener arayüzünü uygulayan bir sınıf tanımlayın.

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

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

  5. Google Play hizmetleri SDK'sına dayanan uygulamalar, özelliklere erişmeden önce cihazı uyumlu bir Google Play hizmetleri APK'sı için kontrol etmelidir. Daha fazla bilgi edinmek için Google Play hizmetlerini kontrol etme APK'sına bakın .

iOS

  1. Geçerli bir APNs sertifikasına ihtiyacınız var. Halihazırda bir hesabınız yoksa, APNs SSL Sertifikaları Sağlayın bölümüne bakın.
  2. Henüz yapmadıysanız Firebase'i C ++ projenize ekleyin . Ardından, projenizi FCM için ayarlamak üzere:
    1. Projenizin Podfile'ına FCM bağımlılığını ekleyin:
      pod 'Firebase/Messaging'
    2. firebase.framework ve firebase_messaging.framework çerçevelerini firebase_messaging.framework C ++ SDK'dan Xcode projenize sürükleyin.
  3. Push Bildirimleri etkinleştirmek için Xcode projenizi yapılandırın:

    1. Navigator 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'a gidin , ardından çerçeve eklemek için + düğmesine 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 sonrasında görünür ve bu kitaplık için gereklidir.

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

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

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

  5. firebase::messaging::Listener arayüzünü uygulayan bir sınıf tanımlayın.

  6. Uygulamayı ve oluşturulmuş bir Dinleyiciyi geçirerek Firebase Cloud Messaging'i başlatın:

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

Cihaz kayıt jetonuna erişin

Firebase Cloud Messaging kitaplığının başlatılmasının ardından, istemci uygulama örneği için bir kayıt jetonu istenir. Uygulama, firebase::messaging::Listener uygulayan sınıfta tanımlanması gereken OnTokenReceived geri OnTokenReceived sahip jetonu alır.

Bu belirli cihazı hedeflemek istiyorsanız, bu jetona erişmeniz gerekir.

Android'de mesaj teslimi hakkında not

Uygulama hiç çalışmadığında 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, mesaj yükleri, uygulamayı başlatmak için kullanılan bir Intent aracılığıyla alınır. onNewIntent bu gelen iletileri C ++ kitaplık geri onNewIntent sağlamak için, Etkinliğinizde 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 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 Her ikisi de
Ön plan OnMessageReceived OnMessageReceived OnMessageReceived
Arka fon Sistem tepsisi OnMessageReceived Bildirim: sistem tepsisi
Veriler: 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 plandayken (veya uygulama arka plandayken 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 Hizmetini 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 , 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. Aşağıdaki gibi <manifest> etiketi içinde uygun özniteliği 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, firebase_messaging_cpp.aar varsayılan ListenerService bildiren bir AndroidManifest.xml dosyası vardır. Bu bildirim normalde projeye özgü bildirimle birleştirilir, bu da ListenerService nasıl çalıştırılabildiğini gösterir. Bu ListenerService , cusom dinleyici hizmetiyle değiştirilmelidir. Bu, varsayılan ListenerService kaldırarak ve projelerinizin AndroidManifest.xml dosyasına aşağıdaki satırlarla 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, 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. Jetonu kullanmadan önce açık bir kayıt almak istiyorsanız, FCM'yi (ve Android, Analytics'te) devre dışı bırakarak yapılandırma sırasında oluşturulmasını 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şlatıldığında devam eder.

FCM, mesajların uygulamanıza derin bağlantı içeren 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. 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>

Ayrıca, 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, belirlediğiniz şema ve barındırıcıya bağlantı içeren bir bildirime dokunduklarında, 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 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, 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.