获取我们在 Firebase 峰会上发布的所有信息,了解 Firebase 可如何帮助您加快应用开发速度并满怀信心地运行应用。了解详情

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 với Unity, hãy sử dụng API Nhắn tin qua đám mây của 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 mỗi nền tảng.

Trước khi bắt đầu

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

  • Cài đặt Unity 2018.4 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 2018.4 được coi là không 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 iOS) Cài đặt phần sau:

    • Xcode 13.3.1 trở lên
    • CocoaPods 1.10.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:

    • Đối với iOS - nhắm mục tiêu iOS 11 trở lên
    • Đối với Android - 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 giả lập để chạy dự án Unity của bạn.

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

    • Đối với Android - Trình giả lập phải sử dụng hình ảnh giả lập 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 một dự án Firebase để kết nối với dự án Unity của mình. Truy cập Tìm hiểu các 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 về 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 .
      Tên gói điều khoản và ID ứ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à số nhận dạng nội bộ, tiện lợi và chỉ hiển thị với bạn trong bảng điều khiển Firebase.

  6. Nhấp 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ổ Dự án 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 kỳ 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, điều hướng đến Nội dung > 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 Nhắn tin qua đám mây Firebase, 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 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 Firebase Cloud Messaging: FirebaseMessaging.unitypackage

    Phân tích không được bật

    Thêm gói cho Firebase Cloud Messaging: FirebaseMessaging.unitypackage

  4. Trong cửa sổ Nhập Gói Hợp nhất , bấm 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 các yêu cầu về phiên bản dịch vụ của Google Play

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

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

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(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.

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

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

  2. Cuộn xuống Khung và Thư viện được Liên kết , sau đó nhấp vào nút + để thêm khung.

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

Bước 8: Bậ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 Nhắn tin qua đá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 .

Khi khởi tạo, 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 sự kiện OnTokenReceived , sự kiện này sẽ được lưu vào bộ nhớ cache để 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 các tin nhắn.

Ngoài ra, bạn sẽ cần phải đăng ký sự kiện OnMessageReceived nếu bạn 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 vào Android

Trên Android, Nhắn tin qua đám mây Firebase đ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, việc thay thế này sẽ diễn ra tự động và bạn không phải thực hiện thêm bất kỳ hành động nào. Các ứng dụng không sử dụng Activity đ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 Firebase Cloud Messaging Unity 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 gọi là 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 vào ứng dụng.

Các tệp này được cung cấp vì UnityPlayerActivity mặc định không xử lý 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 Firebase xử lý chính xác các tin nhắn đến.

Định cấu hình Hoạt động của đ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 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 , bạn có thể mở rộng com.google.firebase.MessagingUnityPlayerActivity để triển khai tất cả các phương thức 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 , 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 Firebase C ++ SDK (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ề 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 sẽ 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.

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à, FirebaseMessage.Notification sẽ là một 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 Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Tiểu sử 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 tự động khởi chạy

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

Nhanh

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.FirebaseMessaging.TokenRegistrationOnInitEnabled = 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 mục đích 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, 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 tin nhắn theo chủ đề và hạ nguồn với Firebase. Để tìm hiểu thêm, hãy xem mẫu bắt đầu nhanh minh họa 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.