Google is committed to advancing racial equity for Black communities. See how.
Trang này được dịch bởi Cloud Translation API.
Switch to English

Thiết lập ứng dụng khách Nhắn tin qua đám mây Firebase với C ++

Để viết ứng dụng khách Nhắn tin qua đám mây Firebase đa nền tảng của bạn bằng C ++, hãy sử dụng API Nhắn tin qua đám mây của Firebase . C ++ SDK hoạt động cho cả Android và iOS, với một số thiết lập bổ sung cần thiết cho mỗi nền tảng.

Thiết lập Firebase và SDK FCM

Android

  1. Nếu bạn chưa có, hãy thêm Firebase vào dự án C ++ của bạn .

    • Trong hướng dẫn thiết lập được liên kết, hãy xem lại các yêu cầu về thiết bị và ứng dụng để sử dụng SDK Firebase C ++, bao gồm đề xuất sử dụng CMake để tạo ứng dụng của bạn.

    • Trong dự án cấp của bạn build.gradle tập tin, hãy chắc chắn để bao gồm kho Maven của Google trong cả hai bạn buildscriptallprojects phần.

  2. Tạo đối tượng Ứng dụng Firebase, truyền trong môi trường JNI và Hoạt động:

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

  3. Xác định một lớp triển khai giao diện firebase::messaging::Listener .

  4. Khởi tạo FCM, truyền trong Ứng dụng và một Trình xử lý được xây dựng:

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

  5. Các ứng dụng dựa trên SDK dịch vụ của Google Play phải kiểm tra thiết bị để tìm APK dịch vụ Google Play tương thích trước khi truy cập các tính năng. Để tìm hiểu thêm, hãy tham khảo APK kiểm tra các dịch vụ của Google Play .

iOS

  1. Bạn cần chứng chỉ APNs hợp lệ. Nếu bạn chưa có, hãy tham khảo Chứng chỉ SSL APN cung cấp .
  2. Nếu bạn chưa có, hãy thêm Firebase vào dự án C ++ của bạn . Sau đó, để thiết lập dự án của bạn cho FCM:
    1. Trong Podfile của dự án, hãy thêm phần phụ thuộc FCM:
      pod 'Firebase/Messaging'
    2. Kéo các khung firebase.frameworkfirebase_messaging.framework vào dự án Xcode của bạn từ Firebase C ++ SDK .
  3. Định cấu hình dự án Xcode của bạn để bật Thông báo đẩy:

    1. Chọn dự án từ khu vực Bộ điều hướng .
    2. Chọn mục tiêu dự án từ khu vực Trình chỉnh sửa .
    3. Chọn tab Chung từ khu vực Trình chỉnh sửa .

      1. Cuộn xuống Khung và Thư viện được Liên kết , sau đó nhấp vào nút + để thêm các khung.
      2. Trong cửa sổ xuất hiện, cuộn đến UserNotifications.framework , nhấp vào mục nhập đó, sau đó nhấp vào Thêm .

        Khung này chỉ xuất hiện trong Xcode v8 trở lên và được yêu cầu bởi thư viện này.

    4. Chọn tab Khả năng từ khu vực Trình chỉnh sửa .

      1. Chuyển Thông báo đẩy sang Bật .
      2. Cuộn xuống Chế độ nền , sau đó chuyển sang Bật .
      3. Chọn Thông báo từ xa trong Chế độ nền .
  4. Tạo đối tượng Ứng dụng Firebase:

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

  5. Xác định một lớp triển khai giao diện firebase::messaging::Listener .

  6. Khởi tạo Nhắn tin qua đám mây Firebase, truyền trong Ứng dụng và một Trình xử lý được xây dựng:

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

Truy cập mã thông báo đăng ký thiết bị

Khi khởi chạy thư viện Nhắn tin qua đám mây của Firebase, mã thông báo đăng ký được yêu cầu cho phiên bản ứng dụng khách. Ứng dụng sẽ nhận được mã thông báo với OnTokenReceived gọi lại OnTokenReceived , phải được định nghĩa trong lớp triển khai firebase::messaging::Listener .

Nếu bạn muốn nhắm mục tiêu thiết bị cụ thể đó, bạn sẽ cần quyền truy cập vào mã thông báo này.

Lưu ý về gửi tin nhắn trên Android

Khi ứng dụng hoàn toàn không chạy và người dùng nhấn vào thông báo, theo mặc định, thông báo không được định tuyến thông qua các lệnh gọi lại được tích hợp sẵn của FCM. Trong trường hợp này, tải tin nhắn được nhận thông qua Intent được sử dụng để khởi động ứng dụng. Để FCM chuyển tiếp các thư đến này tới lệnh gọi lại thư viện C ++, bạn cần ghi đè phương thức onNewIntent trong Activity của mình và chuyển Intent tới 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());
    startService(message);
  }
}

Các tin nhắn nhận được trong khi ứng dụng ở chế độ nền có nội dung của trường thông báo được sử dụng để điền thông báo trên khay hệ thống, nhưng nội dung thông báo đó sẽ không được truyền tới FCM. Tức là, Message::notification sẽ là giá trị rỗng.

Tóm tắt:

Trạng thái ứng dụng Thông báo Dữ liệu Cả hai
Vấn đề xung quanh OnMessageReceived OnMessageReceived OnMessageReceived
Lý lịch Khay hệ thống OnMessageReceived Thông báo: khay hệ thống
Dữ liệu: trong phần bổ sung của mục đích.

Xử lý tin nhắn tùy chỉnh trên Android

Theo mặc định, các thông báo gửi đến ứng dụng được chuyển tới ::firebase::messaging::Listener::OnMessageReceived , nhưng trong một số trường hợp, bạn có thể muốn ghi đè hành vi mặc định. Để thực hiện việc này trên Android, bạn sẽ cần viết các lớp tùy chỉnh mở rộng com.google.firebase.messaging.cpp.ListenerService cũng như cập nhật AndroidManifest.xml trong dự án của bạn.

Ghi đè các phương thức ListenerService .

ListenerService là lớp Java chặn các tin nhắn đến được gửi đến ứng dụng và định tuyến chúng đến thư viện C ++. Khi ứng dụng ở nền trước (hoặc khi ứng dụng ở nền và nó nhận trọng tải chỉ dữ liệu), các tin nhắn sẽ chuyển qua một trong các lệnh gọi lại được cung cấp trên lớp này. Để thêm hành vi tùy chỉnh vào xử lý tin nhắn, bạn sẽ cần mở rộng ListenerService mặc định của FCM:

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

Bằng cách ghi đè phương thức ListenerService.onMessageReceived , bạn có thể thực hiện các hành động dựa trên đối tượng RemoteMessage đã nhận và nhận dữ liệu thông báo:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService cũng có một số phương pháp khác ít được sử dụng hơn. Chúng cũng có thể bị ghi đè, để biết thêm thông tin, hãy xem tài liệu tham khảo FirebaseMessagingService .

@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);
}

Cập nhật AndroidManifest.xml

Khi các lớp tùy chỉnh của bạn đã được viết xong, chúng phải được đưa vào AndroidManifest.xml để có hiệu lực. Đảm bảo rằng tệp kê khai bao gồm các công cụ hợp nhất bằng cách khai báo thuộc tính thích hợp bên trong <manifest> , như sau:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

Trong kho lưu trữ firebase_messaging_cpp.aar có tệp AndroidManifest.xml khai báo ListenerService mặc định của FCM. Tệp kê khai này thường được hợp nhất với tệp kê khai cụ thể của dự án, đó là cách ListenerService có thể chạy. ListenerService này cần được thay thế bằng dịch vụ nghe cusom. Điều đó được thực hiện bằng cách xóa ListenerService mặc định và thêm Dịch vụ tùy chỉnh, có thể được thực hiện với các dòng sau tệp AndroidManifest.xml dự án của bạn:

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

Ngăn tự động khởi chạy

FCM tạo ID phiên bản, được sử dụng làm mã thông báo đăng ký trong FCM. Khi ID phiên bản được tạo, thư viện sẽ tải dữ liệu nhận dạng và cấu hình lên Firebase. Nếu bạn muốn có được lựa chọn rõ ràng trước khi sử dụng ID phiên bản, bạn có thể ngăn việc tạo tại thời điểm định cấu hình bằng cách tắt FCM (và trên Android, Analytics) . Để thực hiện việc này, hãy thêm giá trị siêu dữ liệu vào Info.plist của bạn (không phải GoogleService-Info.plist của bạn) trên iOS hoặc AndroidManifest.xml của bạn trên Android:

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

Để bật lại FCM, bạn có thể thực hiện cuộc gọi trong thời gian chạy:

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

Giá trị này vẫn tồn tại qua các lần khởi động lại ứng dụng sau khi được đặt.

FCM cho phép gửi tin nhắn có chứa liên kết sâu vào ứng dụng của bạn. Để nhận thông báo có chứa liên kết sâu, bạn phải thêm bộ lọc ý định mới vào hoạt động xử lý liên kết sâu cho ứng dụng của mình. Bộ lọc ý định phải bắt được các liên kết sâu của miền của bạn. Nếu thư của bạn không chứa liên kết sâu thì cấu hình này không cần thiết. Trong AndroidManifest.xml:

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

Cũng có thể chỉ định một ký tự đại diện để làm cho bộ lọc ý định linh hoạt hơn. Ví dụ:

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

Khi người dùng nhấn vào thông báo có chứa liên kết đến lược đồ và máy chủ lưu trữ mà bạn chỉ định, ứng dụng của bạn sẽ bắt đầu hoạt động với bộ lọc ý định này để xử lý liên kết.

Bước tiếp theo

Sau khi thiết lập ứng dụng khách, bạn đã sẵn sàng gửi các thông báo về chủ đề và thông báo xuôi dòng với Firebase. Để tìm hiểu thêm, hãy xem chức năng này được trình bày trong mẫu bắt đầu nhanh mà bạn có thể tải xuống, chạy và xem lại.

Để thêm hành vi khác, nâng cao hơn vào ứng dụng của bạn, hãy xem hướng dẫn gửi tin nhắn từ máy chủ ứng dụng:

Hãy nhớ rằng bạn sẽ cần triển khai máy chủ để sử dụng các tính năng này.