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

Để viết cross-platform căn cứ hỏa lực Cloud Messaging ứng dụng khách hàng của bạn với Unity, sử dụng các căn cứ hỏa lực Cloud Messaging API. 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 2017.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 2017.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.

  • (iOS chỉ) Cài đặt như sau:

    • Xcode 9.4.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:

    • For iOS - nhắm vào iOS 10 hoặc cao hơn
    • Đối với Android - mức mục tiêu API 19 (KitKat) hoặc cao hơ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.

    • For iOS - Thiết lập một thiết bị iOS của vật lý để chạy ứng dụng của bạn, và hoàn thành các nhiệm vụ:

    • Đối với Android - Emulators phải sử dụng một hình ảnh giả lập với Google Play.

Nếu bạn chưa có một dự án Unity và chỉ muốn thử ra một sản phẩm căn cứ hỏa lực, bạn có thể tải về một trong chúng tôi mẫu QuickStart .

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. Thăm Hiểu căn cứ hỏa lực dự án để tìm hiểu thêm về các dự án căn cứ hỏa lực.

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. Tới các căn cứ hỏa lực console .

  2. Ở trung tâm của trang tổng quan về dự án, nhấp vào biểu tượng Unity ( ) để khởi động công việc cài đặt.

    Nếu bạn đã thêm vào một ứng dụng cho dự án căn cứ hỏa lực của bạn, 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.

    • For iOS - Nhập iOS ID dự án Unity của bạn trong bó ID iOS lĩnh vực.

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

  5. (Tùy chọn) Nhập nickname nền tảng cụ thể dự án Unity của bạn (s).
    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. Bấm 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.

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

    • Đối với Android - Bấm Tải google-services.json.

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

  3. Trở lại trong căn cứ hỏa lực điều khiển, trong công việc cài đặt, nhấn Next.

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

  1. Trong căn cứ hỏa lực điều khiển, bấm Tải về căn cứ hỏa lực Unity SDK, sau đó giải nén SDK ở đâu đó thuận tiện.

  2. Trong dự án của bạn mở Unity, điều hướng đến Tài sản> Import Package> Custom Package.

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

    Đối với một kinh nghiệm tối ưu với căn cứ hỏa lực Cloud Messaging, chúng tôi khuyên phép Google Analytics trong dự án của bạn. Ngoài ra, là một phần của việc 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 căn cứ hỏa lực cho Google Analytics: FirebaseAnalytics.unitypackage
    • Thêm gói cho căn cứ hỏa lực Cloud Messaging: FirebaseMessaging.unitypackage

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

    Thêm gói cho căn cứ hỏa lực Cloud Messaging: FirebaseMessaging.unitypackage

  4. Trong cửa sổ Import Unity Package, bấm Import.

  5. Trở lại trong căn cứ hỏa lực điều khiển, trong công việc cài đặt, nhấn Next.

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

Các căn cứ hỏa lực Unity SDK cho Android đòi hỏi các dịch vụ Google Play , mà phải được up-to-date 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. Click vào dự án trong Xcode, sau đó chọn tab General từ khu vực Editor.

  2. Cuộn xuống Linked Khung và thư viện, sau đó nhấn nút + để thêm một khuôn khổ.

  3. Trong cửa sổ xuất hiện, di chuyển đến UserNotifications.framework, kích chuột phải vào đó, sau đó nhấn Add.

Bước 8: Bật thông báo đẩy

  1. Click vào dự án trong Xcode, sau đó chọn tab Khả năng từ khu vực Editor.

  2. Chuyển Notifications Push to On.

  3. Cuộn xuống nền chế độ, sau đó chuyển nó sang On.

  4. Chọn thông báo từ xa hộp kiểm dưới chế độ nền.

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

Thư viện căn cứ hỏa lực của Cloud nhắn sẽ được khởi tạo khi thêm xử lý cho một trong hai TokenReceived hoặc MessageReceived sự kiện.

Khi khởi tạo, một 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 các OnTokenReceived sự kiện, mà nên được lưu trữ để sử dụng sau. 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ý cho OnMessageReceived sự kiện nếu bạn muốn để có thể nhận tin nhắn gửi đế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, căn cứ hỏa lực Cloud Messaging đi kèm với một hoạt động điểm vào tùy chỉnh mà thay thế mặc định UnityPlayerActivity . Nếu bạn không sử dụng điểm nhập tùy chỉnh, việc thay thế này 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. Apps mà không sử dụng các mục nhập mặc định Hoạt động điểm hoặc cung cấp mà chính họ Assets/Plugins/AndroidManifest.xml sẽ cần thêm cấu hình.

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 gọi là MessagingUnityPlayerActivity thay thế các tiêu chuẩn UnityPlayerActivity .
  • Assets/Plugins/Android/AndroidManifest.xml chỉ thị các ứng dụng sử dụng MessagingUnityPlayerActivity như điểm mấu chốt để các ứng dụng.

Những tập tin này được cung cấp bởi vì mặc định UnityPlayerActivity không xử lý onStop , onRestart hoạt động chuyển tiếp vòng đời hoặc thực hiện các onNewIntent đó là cần thiết cho căn cứ hỏa lực Cloud Messaging để xử lý một cách chính xá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 mặc định UnityPlayerActivity bạn sẽ cần phải loại bỏ được cung cấp AndroidManifest.xml và đảm bảo rằng hoạt động tùy chỉnh của bạn đúng cách xử lý tất cả hiệu ứng chuyển tiếp của Hoạt động Vòng đời Android (một ví dụ về làm thế nào để làm điều này được thể hiện dưới đây). Nếu hoạt động tùy chỉnh của bạn kéo dài UnityPlayerActivity bạn thay vì có thể mở rộng com.google.firebase.MessagingUnityPlayerActivity mà cụ 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 , bạn nên bao gồm các đoạn sau đây trong hoạt động của bạn.

/**
 * 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 căn cứ hỏa lực C ++ SDK (7.1.0 trở đi) sử dụng JobIntentService đòi hỏi sửa đổi bổ sung trong AndroidManifest.xml file.

<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, nội dung thông báo được nhận thông qua một Intent 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. Đó là, FirebaseMessage.Notification sẽ là một 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 ý đị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 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). Để làm điều này, thêm một giá trị siêu dữ liệu để bạn Info.plist (không phải của bạn GoogleService-Info.plist ) trên Apple, hoặc bạn 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

Để 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 ý đị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 trong 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 các thông điệp về chủ đề và hạ nguồn với Firebase. Để tìm hiểu thêm, vui lòng xem mẫu QuickStart đó chứng tỏ 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 một triển khai máy chủ để tận dụng các tính năng này.