Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

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

Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

Để 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 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 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 cũ hơn 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 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 Apple) Cài đặt như 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 tvOS - nhắm mục tiêu tvOS 12 trở lên
    • Đối với 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 giả lập để chạy dự án Unity của bạn.

    • Đối với iOS hoặc tvOS — Thiết lập thiết bị 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 AndroidTrình giả lập phải sử dụng hình ảnh giả lập với Google Play.

Nếu 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 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, 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 một ứ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 bản dựng nào 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à mã định danh 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ấ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 ở một nơi thuận tiện.

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

    • Firebase Unity SDK 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, trong 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 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 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 các yêu cầu về phiên bản dịch vụ của Google Play

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

Thêm đoạn mã 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 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 Linked Frameworks and Libraries , 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 thành Bật .

  3. Cuộn xuống Chế độ nền , sau đó chuyển 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 chạy khi thêm trình xử lý cho 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 , mã này sẽ được lưu vào bộ đệ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 đăng ký sự kiện OnMessageReceived nếu bạn muốn có thể nhận 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 Điểm vào Android Hoạt động

Trên Android, Nhắn tin qua đám mây Firebase đi kèm với hoạt động điểm truy cập tùy chỉnh thay thế UnityPlayerActivity mặc định. Nếu bạn không sử dụng một điểm nhập tùy chỉnh thì quá trình thay thế này sẽ diễn ra tự động và bạn không cần 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 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 Cloud Messaging của 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 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ý các quá trình chuyển đổi vòng đời hoạt động onStop , onRestart hoặc triển khai onNewIntent cần thiết cho Firebase Cloud Messaging để xử lý chính xác các thư đến.

Định cấu hình điểm vào tùy chỉnh Hoạt động

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 , 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 một 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);
}

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 một 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 tích hợp sẵn 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 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à null.

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 mục đích.

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

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 mã định danh và dữ liệu cấu hình lên Firebase. Nếu bạn muốn nhận được sự đồng ý 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 của bạn (không phải GoogleService-Info.plist ) 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 thời gian chạy:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

Giá trị này vẫn tồn tại trong 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 tới ứng dụng của bạn. Để nhận 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 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, 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 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 xuôi dòng và tin nhắn theo chủ đề 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.