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

Để 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 Unity, hãy sử dụng API Nhắn tin qua đám mây Firebase . Unity SDK hoạt động cho cả Android và Apple, với một số thiết lập bổ sung cần thiết cho từng nền tảng.

Trước khi bắt đầu

Điều kiện tiên quyết

  • Cài đặt Unity 2019.1 trở lên. Các phiên bản trước đó cũng có thể tương thích nhưng sẽ không được hỗ trợ tích cực. Hỗ trợ cho Unity 2019.1 được coi là không được dùng nữa và sẽ không còn được hỗ trợ tích cực sau bản phát hành chính tiếp theo.

  • (Chỉ dành cho nền tảng của Apple) Cài đặt như sau:

    • Xcode 13.3.1 trở lên
    • CocoaPods 1.12.0 trở lên
  • Đảm bảo rằng dự án Unity của bạn đáp ứng các yêu cầu sau:

    • Dành cho iOS - nhắm mục tiêu iOS 11 trở lên
    • Dành cho tvOS - nhắm mục tiêu tvOS 12 trở lên
    • Dành cho Android - nhắm mục tiêu API cấp 19 (KitKat) trở lên
  • Thiết lập thiết bị hoặc sử dụng trình mô phỏng để chạy dự án Unity của bạn.

    • Đối với iOS hoặc tvOS — Thiết lập thiết bị vật lý để chạy ứng dụng của bạn và hoàn thành các tác vụ sau:

    • Đối với AndroidTrình giả lập phải sử dụng hình ảnh trình mô phỏng với Google Play.

Nếu bạn chưa có dự án Unity và chỉ muốn dùng thử sản phẩm Firebase, bạn có thể tải xuống một trong các mẫu bắt đầu nhanh của chúng tôi.

Bước 1: Tạo dự án Firebase

Trước khi có thể thêm Firebase vào dự án Unity của mình, bạn cần tạo dự án Firebase để kết nối với dự án Unity của mình. Truy cập Tìm hiểu dự án Firebase để tìm hiểu thêm về các dự án Firebase.

Bước 2: Đăng ký ứng dụng của bạn với Firebase

Bạn có thể đăng ký một hoặc nhiều ứng dụng hoặc trò chơi để kết nối với dự án Firebase của mình.

  1. Chuyển đến bảng điều khiển Firebase .

  2. Ở giữa trang tổng quan dự án, hãy nhấp vào biểu tượng Unity ( ) để khởi chạy quy trình thiết lập.

    Nếu bạn đã thêm ứng dụng vào dự án Firebase của mình, hãy nhấp vào Thêm ứng dụng để hiển thị các tùy chọn nền tảng.

  3. Chọn mục tiêu xây dựng của dự án Unity mà bạn muốn đăng ký hoặc thậm chí bạn có thể chọn đăng ký cả hai mục tiêu ngay bây giờ cùng một lúc.

  4. Nhập (các) ID dành riêng cho nền tảng của dự án Unity của bạn.

    • Đối với iOS - Nhập ID iOS của dự án Unity của bạn vào trường ID gói iOS .

    • Đối với Android - Nhập ID Android của dự án Unity của bạn vào trường tên gói Android .
      Thuật ngữ tên góiID ứng dụng thường được sử dụng thay thế cho nhau.

  5. (Tùy chọn) Nhập (các) biệt hiệu dành riêng cho nền tảng của dự án Unity của bạn.
    Những biệt hiệu này là giá trị nhận dạng nội bộ, thuận tiện và chỉ hiển thị với bạn trong bảng điều khiển Firebase.

  6. Nhấn vào Đăng ký ứng dụng .

Bước 3: Thêm tệp cấu hình Firebase

  1. Nhận (các) tệp cấu hình Firebase dành riêng cho nền tảng của bạn trong quy trình thiết lập bảng điều khiển Firebase.

    • Đối với iOS — Nhấp vào Tải xuống GoogleService-Info.plist .

    • Đối với Android — Nhấp vào Tải xuống google-services.json .

  2. Mở cửa sổ Project của dự án Unity của bạn, sau đó di chuyển (các) tệp cấu hình của bạn vào thư mục Assets .

  3. Quay lại bảng điều khiển Firebase, trong quy trình thiết lập, hãy nhấp vào Tiếp theo .

Bước 4: Thêm SDK Unity Firebase

  1. Trong bảng điều khiển Firebase, nhấp vào Tải xuống Firebase Unity SDK , sau đó giải nén SDK ở nơi nào đó thuận tiện.

    • Bạn có thể tải xuống lại Firebase Unity SDK bất cứ lúc nào.

    • SDK Unity Firebase không dành riêng cho nền tảng.

  2. Trong dự án Unity đang mở của bạn, hãy điều hướng đến Tài sản > Gói nhập > Gói tùy chỉnh .

  3. Từ SDK đã giải nén, hãy chọn các sản phẩm Firebase được hỗ trợ mà bạn muốn sử dụng trong ứng dụng của mình.

    Để có trải nghiệm tối ưu với Firebase Cloud Messaging, chúng tôi khuyên bạn nên bật Google Analytics trong dự án của mình. Ngoài ra, là một phần của quá trình thiết lập Analytics, bạn cần thêm gói Firebase dành cho Analytics vào ứng dụng của mình.

    Đã bật phân tích

    • Thêm gói Firebase cho Google Analytics: FirebaseAnalytics.unitypackage
    • Thêm gói cho Nhắn tin qua đám mây Firebase: FirebaseMessaging.unitypackage

    Phân tích chưa được bật

    Thêm gói cho Nhắn tin qua đám mây Firebase: FirebaseMessaging.unitypackage

  4. Trong cửa sổ Nhập gói Unity , nhấp vào Nhập .

  5. Quay lại bảng điều khiển Firebase, trong quy trình thiết lập, hãy nhấp vào Tiếp theo .

Bước 5: Xác nhận yêu cầu về phiên bản dịch vụ Google Play

SDK Firebase Unity dành cho Android yêu cầu dịch vụ Google Play , dịch vụ này phải được cập nhật trước khi có thể sử dụng SDK.

Thêm câu lệnh using và mã khởi tạo sau vào đầu ứng dụng của bạn. Bạn có thể kiểm tra và tùy ý cập nhật dịch vụ Google Play lên phiên bản được SDK Unity Firebase yêu cầu trước khi gọi bất kỳ phương thức nào khác trong SDK.

using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Create and hold a reference to your FirebaseApp,
    // where app is a Firebase.FirebaseApp property of your application class.
       app = Firebase.FirebaseApp.DefaultInstance;

    // Set a flag here to indicate whether Firebase is ready to use by your app.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

Dự án Unity của bạn đã được đăng ký và định cấu hình để sử dụng Firebase.

Kích hoạt thông báo đẩy trên nền tảng Apple

Bước 1: Thêm khung thông báo người dùng

  1. Nhấp vào dự án trong Xcode, sau đó chọn tab General từ khu vực Editor .

  2. Cuộn xuống Linked Frameworks and Libraries , sau đó nhấp vào nút + để thêm framework.

  3. Trong cửa sổ xuất hiện, cuộn đến UserNotifications.framework , nhấp vào mục đó, sau đó nhấp vào Add .

Bước 2: Kích hoạt thông báo đẩy

  1. Nhấp vào dự án trong Xcode, sau đó chọn tab Khả năng từ khu vực Trình chỉnh sửa .

  2. Chuyển Thông báo đẩy sang Bật .

  3. Cuộn xuống Chế độ nền , sau đó chuyển sang Bật .

  4. Chọn hộp kiểm Thông báo từ xa trong Chế độ nền .

Khởi tạo tin nhắn đám mây Firebase

Thư viện Firebase Cloud Message sẽ được khởi tạo khi thêm trình xử lý cho các sự kiện TokenReceived hoặc MessageReceived .

Sau khi khởi tạo, mã thông báo đăng ký sẽ đượ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 sự kiện OnTokenReceived , mã thông báo này sẽ được lưu vào bộ nhớ đệm để sử dụng sau này. Bạn sẽ cần mã thông báo này nếu bạn muốn nhắm mục tiêu thiết bị cụ thể này cho tin nhắn.

Ngoài ra, bạn sẽ cần phải đăng ký sự kiện OnMessageReceived nếu muốn có thể nhận được tin nhắn đến.

Toàn bộ thiết lập trông như thế này:

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

Định cấu hình hoạt động điểm truy cập Android

Trên Android, Firebase Cloud Messaging đi kèm với hoạt động điểm nhập tùy chỉnh thay thế UnityPlayerActivity mặc định. Nếu bạn không sử dụng điểm nhập tùy chỉnh thì việc thay thế này sẽ tự động diễn ra và bạn không cần phải thực hiện bất kỳ hành động bổ sung nào. Các ứng dụng không sử dụng Hoạt động điểm nhập mặc định hoặc cung cấp Assets/Plugins/AndroidManifest.xml của riêng chúng sẽ cần cấu hình bổ sung.

Plugin Unity nhắn tin qua đám mây Firebase trên Android đi kèm với hai tệp bổ sung:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar chứa một hoạt động có tên MessagingUnityPlayerActivity thay thế UnityPlayerActivity tiêu chuẩn.
  • Assets/Plugins/Android/AndroidManifest.xml hướng dẫn ứng dụng sử dụng MessagingUnityPlayerActivity làm điểm truy cập vào ứng dụng.

Các tệp này được cung cấp vì UnityPlayerActivity mặc định không xử lý các chuyển đổi vòng đời hoạt động onStop , onRestart hoặc triển khai onNewIntent cần thiết để Nhắn tin qua đám mây của Firebase xử lý chính xác các tin nhắn đến.

Định cấu hình hoạt động điểm nhập tùy chỉnh

Nếu ứng dụng của bạn không sử dụng UnityPlayerActivity mặc định, bạn sẽ cần xóa AndroidManifest.xml được cung cấp và đảm bảo rằng hoạt động tùy chỉnh của bạn xử lý đúng cách tất cả các chuyển đổi của Vòng đời hoạt động Android (ví dụ về cách thực hiện việc này được hiển thị bên dưới). Nếu hoạt động tùy chỉnh của bạn mở rộng UnityPlayerActivity , thay vào đó bạn có thể mở rộng com.google.firebase.MessagingUnityPlayerActivity để triển khai tất cả các phương pháp cần thiết.

Nếu bạn đang sử dụng Hoạt động tùy chỉnh và không mở rộng com.google.firebase.MessagingUnityPlayerActivity thì bạn nên đưa các đoạn mã sau vào Hoạt động của mình.

/**
 * Workaround for when a message is sent containing both a Data and Notification payload.
 *
 * When the app is in the background, if a message with both a data and notification payload is
 * received the data payload is stored on the Intent passed to onNewIntent. By default, that
 * intent does not get set as the Intent that started the app, so when the app comes back online
 * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so
 * that it sends the intent to the MessageForwardingService which forwards the message to the
 * FirebaseMessagingService which in turn sends the message to the application.
 */
@Override
protected void onNewIntent(Intent intent) {
  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);
}

/**
 * Dispose of the mUnityPlayer when restarting the app.
 *
 * This ensures that when the app starts up again it does not start with stale data.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
  if (mUnityPlayer != null) {
    mUnityPlayer.quit();
    mUnityPlayer = null;
  }
  super.onCreate(savedInstanceState);
}

Các phiên bản mới của SDK Firebase C++ (7.1.0 trở đi) sử dụng JobIntentService yêu cầu sửa đổi bổ sung trong tệp AndroidManifest.xml .

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

Lưu ý về việc 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 một thông báo, theo mặc định, tin nhắn sẽ không được chuyển qua các lệnh gọi lại tích hợp của FCM. Trong trường hợp này, tải trọng tin nhắn được nhận thông qua Intent được sử dụng để khởi động ứng dụng.

Các tin nhắn nhận được khi ứng dụng chạy ở 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à FirebaseMessage.Notification sẽ không có giá trị.

Tóm tắt:

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

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

FCM tạo mã thông báo đăng ký để nhắm mục tiêu theo thiết bị. Khi mã thông báo đượ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 nhận được quyền chọn tham gia rõ ràng trước khi sử dụng mã thông báo, bạn có thể ngăn việc tạo vào 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 (không phải GoogleService-Info.plist ) trên Apple hoặc AndroidManifest.xml 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>

Nhanh

FirebaseMessagingAutoInitEnabled = NO

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

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

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

FCM cho phép gửi tin nhắn chứa liên kết sâu vào ứng dụng của bạn. Để nhận được thư 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 sẽ bắt được các liên kết sâu trong miền của bạn. Nếu tin nhắn của bạn không chứa liên kết sâu thì cấu hình này là 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 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 chứa liên kết đến lược đồ và máy chủ 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 tin nhắn theo chủ đề và xuôi dòng bằng Firebase. Để tìm hiểu thêm, hãy xem mẫu bắt đầu nhanh thể hiện chức năng này.

Để 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.