Google is committed to advancing racial equity for Black communities. See how.
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ตั้งค่าแอปไคลเอ็นต์ Firebase Cloud Messaging ด้วย Unity

หากต้องการเขียนแอปไคลเอ็นต์ Firebase Cloud Messaging ข้ามแพลตฟอร์มด้วย Unity ให้ใช้ Firebase Cloud Messaging API Unity SDK ใช้งานได้กับทั้ง Android และ iOS โดยต้องมีการตั้งค่าเพิ่มเติมบางอย่างสำหรับแต่ละแพลตฟอร์ม

ก่อนที่คุณจะเริ่ม

ข้อกำหนดเบื้องต้น

  • ติดตั้ง Unity 5.3 หรือใหม่กว่า

  • (iOS เท่านั้น) ติดตั้งสิ่งต่อไปนี้:

    • Xcode 9.4.1 หรือใหม่กว่า
    • CocoaPods 1.9.0 หรือใหม่กว่า
  • ตรวจสอบให้แน่ใจว่าโครงการ Unity ของคุณตรงตามข้อกำหนดเหล่านี้:

    • สำหรับ iOS - กำหนดเป้าหมายเป็น iOS 10 หรือใหม่กว่า
    • สำหรับ Android - กำหนดเป้าหมาย API ระดับ 16 (Jelly Bean) หรือใหม่กว่า
  • ตั้งค่าอุปกรณ์หรือใช้โปรแกรมจำลองเพื่อเรียกใช้โครงการ Unity ของคุณ

    • สำหรับ iOS - ตั้งค่า อุปกรณ์ iOS จริง เพื่อเรียกใช้แอปของคุณและทำงานเหล่านี้ให้เสร็จสิ้น:

      • รับคีย์การตรวจสอบสิทธิ์ Apple Push Notification สำหรับ บัญชี Apple Developer ของ คุณ
      • เปิดใช้งานการแจ้งเตือนแบบพุชใน XCode ภายใต้ แอพ > ความสามารถ
    • สำหรับ Android - อีมูเลเตอร์ ต้องใช้ภาพจำลองกับ Google Play

หากคุณยังไม่มีโครงการ Unity และต้องการทดลองใช้ผลิตภัณฑ์ Firebase คุณสามารถดาวน์โหลด ตัวอย่างการเริ่มต้นอย่างรวดเร็ว ของเรา

ขั้นตอนที่ 1: สร้างโครงการ Firebase

ก่อนที่คุณจะสามารถเพิ่ม Firebase ในโปรเจ็กต์ Unity คุณต้องสร้างโปรเจ็กต์ Firebase เพื่อเชื่อมต่อกับโปรเจ็กต์ Unity ของคุณ ไปที่ ทำความเข้าใจกับโครงการ Firebase เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับโครงการ Firebase

ขั้นตอนที่ 2: ลงทะเบียนแอปของคุณกับ Firebase

คุณสามารถลงทะเบียนแอปหรือเกมอย่างน้อยหนึ่งรายการเพื่อเชื่อมต่อกับโครงการ Firebase ของคุณ

  1. ไปที่ คอนโซล Firebase

  2. ตรงกลางหน้าภาพรวมโครงการคลิกไอคอน Unity ( ) เพื่อเปิดเวิร์กโฟลว์การตั้งค่า

    หากคุณได้เพิ่มแอปลงในโครงการ Firebase แล้วให้คลิก เพิ่มแอป เพื่อแสดงตัวเลือกแพลตฟอร์ม

  3. เลือกเป้าหมายการสร้างของโครงการ Unity ที่คุณต้องการลงทะเบียนหรือคุณสามารถเลือกที่จะลงทะเบียนเป้าหมายทั้งสองได้ในเวลาเดียวกัน

  4. ป้อน ID เฉพาะแพลตฟอร์มของโครงการ Unity

    • สำหรับ iOS - ป้อน ID iOS ของโปรเจ็กต์ Unity ของคุณในฟิลด์ รหัสบันเดิลของ iOS

    • สำหรับ Android - ป้อนรหัส Android ของโครงการ Unity ในช่อง ชื่อแพ็กเกจ Android
      ชื่อแพ็กเกจ เงื่อนไขและ รหัสแอปพลิเคชัน มักใช้แทนกันได้

  5. (ไม่บังคับ) ป้อนชื่อเล่นเฉพาะแพลตฟอร์มของโครงการ Unity
    ชื่อเล่นเหล่านี้เป็นตัวระบุความสะดวกภายในและมีคุณเท่านั้นที่มองเห็นได้ในคอนโซล Firebase

  6. คลิก ลงทะเบียนแอป

ขั้นตอนที่ 3: เพิ่มไฟล์การกำหนดค่า Firebase

  1. รับไฟล์การกำหนดค่า Firebase เฉพาะแพลตฟอร์มของคุณในเวิร์กโฟลว์การตั้งค่าคอนโซล Firebase

    • สำหรับ iOS - คลิก ดาวน์โหลด GoogleService-Info.plist

    • สำหรับ Android - คลิก ดาวน์โหลด google-services.json

  2. เปิดหน้าต่าง โปรเจ็กต์ ของโปรเจ็กต์ Unity จากนั้นย้ายไฟล์กำหนดค่าของคุณไปที่โฟลเดอร์ Assets

  3. กลับไปที่คอนโซล Firebase ในขั้นตอนการตั้งค่าคลิก ถัดไป

ขั้นตอนที่ 4: เพิ่ม Firebase Unity SDK

  1. ในคอนโซล Firebase ให้คลิก ดาวน์โหลด Firebase Unity SDK จากนั้นคลายซิป SDK ในที่ที่สะดวก

    • คุณสามารถดาวน์โหลด Firebase Unity SDK อีกครั้งได้ทุกเมื่อ

    • Firebase Unity SDK ไม่ใช่เฉพาะแพลตฟอร์ม

  2. ในโปรเจ็กต์ Unity ที่เปิดอยู่ให้ไปที่ Assets > Import Package > Custom Package

  3. จาก SDK ที่คลายซิปให้เลือก ผลิตภัณฑ์ Firebase ที่รองรับ ซึ่งคุณต้องการใช้ในแอปของคุณ

    เพื่อประสบการณ์ที่ดีที่สุดกับ Firebase Cloud Messaging เราขอแนะนำให้ เปิดใช้ Google Analytics ในโครงการของคุณ นอกจากนี้ในการตั้งค่า Analytics คุณต้องเพิ่มแพ็คเกจ Firebase สำหรับ Analytics ลงในแอปของคุณ

    เปิดใช้งานการวิเคราะห์

    • เพิ่มแพ็คเกจ Firebase สำหรับ Google Analytics: FirebaseAnalytics.unitypackage
    • เพิ่มแพ็กเกจสำหรับ Firebase Cloud Messaging: FirebaseMessaging.unitypackage

    ไม่ได้เปิดใช้งานการวิเคราะห์

    เพิ่มแพ็กเกจสำหรับ Firebase Cloud Messaging: FirebaseMessaging.unitypackage

  4. ในหน้าต่าง นำเข้า Unity Package ให้คลิก นำเข้า

  5. กลับไปที่คอนโซล Firebase ในขั้นตอนการตั้งค่าคลิก ถัดไป

ขั้นตอนที่ 5: ยืนยันข้อกำหนดเวอร์ชันบริการ Google Play

Firebase Unity SDK สำหรับ Android ต้องใช้ บริการ Google Play ซึ่งต้องเป็นข้อมูลล่าสุดก่อนจึงจะใช้ SDK ได้

เพิ่มรหัสต่อไปนี้เมื่อเริ่มต้นแอปพลิเคชันของคุณ คุณสามารถตรวจสอบและเลือกอัปเดตบริการ Google Play เป็นเวอร์ชันที่ Firebase Unity SDK ต้องการได้ก่อนที่จะเรียกใช้วิธีการอื่นใดใน 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.
  }
});

โครงการ Unity ของคุณได้รับการลงทะเบียนและกำหนดค่าให้ใช้ Firebase

ขั้นตอนที่ 7: เพิ่มกรอบการแจ้งเตือนผู้ใช้

  1. คลิกที่โครงการใน Xcode จากนั้นเลือกแท็บ ทั่วไป จาก พื้นที่ตัวแก้ไข

  2. เลื่อนลงไปที่ Linked Frameworks and Libraries จากนั้นคลิกปุ่ม + เพื่อเพิ่ม Framework

  3. ในหน้าต่างที่ปรากฏขึ้นให้เลื่อนไปที่ UserNotifications.framework คลิกรายการนั้นจากนั้นคลิก เพิ่ม

ขั้นตอนที่ 8: เปิดใช้งานการแจ้งเตือนแบบพุช

  1. คลิกที่โครงการใน Xcode จากนั้นเลือกแท็บ ความสามารถ จาก พื้นที่ตัวแก้ไข

  2. เปลี่ยนการ แจ้งเตือนแบบพุช เป็น เปิด

  3. เลื่อนลงไปที่ โหมดพื้น หลังจากนั้นเปลี่ยนเป็น เปิด

  4. เลือกช่องทำเครื่องหมายการ แจ้งเตือนระยะไกล ภายใต้ โหมดพื้นหลัง

เริ่มต้น Firebase Cloud Messaging

ไลบรารี Firebase Cloud Message จะเริ่มต้นเมื่อเพิ่มตัวจัดการสำหรับเหตุการณ์ TokenReceived หรือ MessageReceived

เมื่อเริ่มต้นจะมีการร้องขอโทเค็นการลงทะเบียนสำหรับอินสแตนซ์แอปไคลเอ็นต์ แอปจะได้รับโทเค็นพร้อมเหตุการณ์ OnTokenReceived ซึ่งควรแคชไว้เพื่อใช้ในภายหลัง คุณจะต้องใช้โทเค็นนี้หากคุณต้องการกำหนดเป้าหมายอุปกรณ์เฉพาะนี้สำหรับข้อความ

นอกจากนี้คุณจะต้องลงทะเบียนสำหรับเหตุการณ์ OnMessageReceived หากคุณต้องการรับข้อความที่เข้ามา

การตั้งค่าทั้งหมดมีลักษณะดังนี้:

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

การกำหนดค่ากิจกรรมจุดเข้าใช้งาน Android

บน Android Firebase Cloud Messaging มาพร้อมกับกิจกรรมจุดเริ่มต้นที่กำหนดเองซึ่งแทนที่ UnityPlayerActivity เริ่มต้น หากคุณไม่ได้ใช้จุดเข้าที่กำหนดเองการแทนที่นี้จะเกิดขึ้นโดยอัตโนมัติและคุณไม่ควรดำเนินการใด ๆ เพิ่มเติม แอปที่ไม่ใช้จุดเริ่มต้นกิจกรรมหรือที่จัดหา Assets/Plugins/AndroidManifest.xml จะต้องมีการกำหนดค่าเพิ่มเติม

ปลั๊กอิน Firebase Cloud Messaging Unity บน Android มาพร้อมกับไฟล์เพิ่มเติมสองไฟล์:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar มีกิจกรรมที่เรียกว่า MessagingUnityPlayerActivity ที่แทนที่ UnityPlayerActivity มาตรฐาน
  • Assets/Plugins/Android/AndroidManifest.xml สั่งให้แอปใช้ MessagingUnityPlayerActivity เป็นจุดเริ่มต้นของแอป

ไฟล์เหล่านี้เป็นเพราะเริ่มต้น UnityPlayerActivity ไม่ได้จัดการ onStop , onRestart กิจกรรมการเปลี่ยนวงจรหรือใช้ onNewIntent ซึ่งเป็นสิ่งจำเป็นสำหรับ Firebase Cloud Messaging เพื่อจัดการกับข้อความที่เข้ามาอย่างถูกต้อง

การกำหนดค่ากิจกรรมจุดเข้าที่กำหนดเอง

หากแอปของคุณไม่ได้ใช้ UnityPlayerActivity ค่าเริ่มต้นคุณจะต้องลบ AndroidManifest.xml ให้มาและตรวจสอบให้แน่ใจว่ากิจกรรมที่กำหนดเองของคุณจัดการช่วงการเปลี่ยนผ่านของ Android Activity Lifecycle ได้อย่างเหมาะสม (ตัวอย่างวิธีการดำเนินการดังแสดงด้านล่าง) หากกิจกรรมที่กำหนดเองของคุณขยาย UnityPlayerActivity คุณสามารถขยาย com.google.firebase.MessagingUnityPlayerActivity แทนซึ่งใช้วิธีการที่จำเป็นทั้งหมด

หากคุณกำลังใช้กิจกรรมที่กำหนดเองและไม่ได้ขยาย com.google.firebase.MessagingUnityPlayerActivity คุณควรรวมตัวอย่างต่อไปนี้ในกิจกรรมของคุณ

/**
 * 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());
  startService(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);
}

หมายเหตุเกี่ยวกับการส่งข้อความบน Android

เมื่อแอปไม่ทำงานเลยและผู้ใช้แตะที่การแจ้งเตือนข้อความจะไม่ถูกกำหนดเส้นทางผ่านการเรียกกลับในตัวของ FCM ในกรณีนี้เพย์โหลดข้อความจะได้รับผ่าน Intent ใช้เพื่อเริ่มแอปพลิเคชัน

ข้อความที่ได้รับในขณะที่แอปทำงานอยู่เบื้องหลังจะมีเนื้อหาของช่องการแจ้งเตือนที่ใช้เพื่อเติมข้อมูลการแจ้งเตือนในถาดระบบ แต่เนื้อหาการแจ้งเตือนนั้นจะไม่ได้รับการสื่อสารกับ FCM นั่นคือ FirebaseMessage.Notification จะเป็นโมฆะ

สรุป:

สถานะของแอป การแจ้งเตือน ข้อมูล ทั้งสอง
เบื้องหน้า Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
พื้นหลัง ถาดระบบ Firebase.Messaging.FirebaseMessaging.MessageReceived การแจ้งเตือน: ถาดระบบ
ข้อมูล: นอกเหนือจากเจตนา

ป้องกันการเริ่มต้นอัตโนมัติ

FCM สร้างโทเค็นการลงทะเบียนสำหรับการกำหนดเป้าหมายอุปกรณ์ เมื่อสร้างโทเค็นไลบรารีจะอัปโหลดตัวระบุและข้อมูลการกำหนดค่าไปยัง Firebase หากคุณต้องการเลือกใช้อย่างชัดเจนก่อนที่จะใช้โทเค็นคุณสามารถป้องกันการสร้างตามเวลาที่กำหนดได้โดยปิดใช้งาน FCM (และบน Android, Analytics) ในการดำเนินการนี้ให้เพิ่มค่าข้อมูลเมตาลงใน Info.plist ของคุณ (ไม่ใช่ GoogleService-Info.plist ) บน iOS หรือ AndroidManifest.xml บน 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

ในการเปิดใช้งาน FCM อีกครั้งคุณสามารถโทรรันไทม์:

Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;

ค่านี้ยังคงอยู่ในทุกแอปที่รีสตาร์ทเมื่อตั้งค่าแล้ว

FCM อนุญาตให้ส่งข้อความที่มีลิงก์ในรายละเอียดไปยังแอปของคุณ หากต้องการรับข้อความที่มีลิงก์ในรายละเอียดคุณต้องเพิ่มตัวกรองความตั้งใจใหม่ให้กับกิจกรรมที่จัดการลิงก์ในรายละเอียดสำหรับแอปของคุณ ตัวกรองความตั้งใจควรจับลิงก์ในรายละเอียดของโดเมนของคุณ หากข้อความของคุณไม่มี Deep Link ก็ไม่จำเป็นต้องกำหนดค่านี้ ใน 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>

นอกจากนี้ยังสามารถระบุสัญลักษณ์แทนเพื่อทำให้ตัวกรองความตั้งใจมีความยืดหยุ่นมากขึ้น ตัวอย่างเช่น:

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

เมื่อผู้ใช้แตะการแจ้งเตือนที่มีลิงก์ไปยังโครงการและโฮสต์ที่คุณระบุแอปของคุณจะเริ่มกิจกรรมด้วยตัวกรองความตั้งใจนี้เพื่อจัดการลิงก์

ขั้นตอนถัดไป

หลังจากตั้งค่าแอปไคลเอ็นต์คุณก็พร้อมที่จะส่งข้อความดาวน์สตรีมและหัวข้อด้วย Firebase หากต้องการเรียนรู้เพิ่มเติมโปรดดู ตัวอย่างการเริ่มต้นอย่างรวดเร็ว ซึ่งแสดงให้เห็นถึงฟังก์ชันนี้

หากต้องการเพิ่มพฤติกรรมขั้นสูงอื่น ๆ ให้กับแอปของคุณโปรดดูคำแนะนำในการส่งข้อความจากเซิร์ฟเวอร์แอป:

โปรดทราบว่าคุณจะต้องมี การติดตั้งเซิร์ฟเวอร์ เพื่อใช้คุณสมบัติเหล่านี้