Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

ก่อนจะเริ่ม

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

  • ติดตั้ง Unity 2017.4 หรือใหม่กว่า เวอร์ชันก่อนหน้าอาจใช้งานร่วมกันได้ แต่จะไม่ได้รับการสนับสนุนอย่างแข็งขัน

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

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

    • สำหรับ iOS - เป้าหมาย iOS ของคุณ 10 หรือสูงกว่า
    • สำหรับ Android - เป้าหมาย API ระดับ 16 (Jelly Bean) หรือสูงกว่า

  • ตั้งค่าอุปกรณ์หรือใช้โปรแกรมจำลองเพื่อเรียกใช้โครงการ Unity ของคุณ

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

    • สำหรับ Android - อีมูเลเตอร์ จะต้องใช้ภาพจำลองกับ Google Play

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

ขั้นตอนที่ 1: สร้างโปรเจ็กต์ Firebase

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

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

คุณลงทะเบียนแอปหรือเกมได้ตั้งแต่ 1 รายการขึ้นไปเพื่อเชื่อมต่อกับโปรเจ็กต์ Firebase

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

  2. ในใจกลางของหน้าภาพรวมโครงการคลิกไอคอนสามัคคี ( ) ที่จะเปิดตัวเวิร์กโฟลว์การติดตั้ง

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

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

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

    • สำหรับ iOS - ป้อนโครงการความสามัคคีของ iOS ID ใน รหัสชุด iOS ฟิลด์

    • สำหรับ Android - ป้อนโครงการความสามัคคีของ ID Android ใน Android ชื่อแพคเกจ ข้อมูล
      ชื่อแง่แพคเกจและบัตรประจำตัวแอพลิเคชันมักจะใช้สลับ

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

  6. คลิกแอปสมัครสมาชิก

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

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

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

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

  2. เปิดหน้าต่างโครงการของโครงการความสามัคคีของคุณแล้วย้ายไฟล์ config ของคุณ (s) ลงใน Assets โฟลเดอร์

  3. ย้อนกลับไปใน Firebase คอนโซลในเวิร์กโฟลว์การติดตั้งคลิกถัดไป

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

  1. ในคอนโซล Firebase คลิกดาวน์โหลด Firebase สามัคคี SDK แล้วเปิดเครื่องรูด SDK สะดวกที่ไหนสักแห่ง

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

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

  2. ในโครงการของคุณเปิดสามัคคีนำทางไปยังสินทรัพย์> นำเข้าแพคเกจ> แพคเกจที่กำหนดเอง

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

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

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

    • เพิ่มแพคเกจ Firebase สำหรับ Google Analytics: FirebaseAnalytics.unitypackage
    • เพิ่มแพคเกจสำหรับ Firebase เมฆส่งข้อความ: FirebaseMessaging.unitypackage

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

    เพิ่มแพคเกจสำหรับ Firebase เมฆส่งข้อความ: FirebaseMessaging.unitypackage

  4. ในหน้าต่างนำเข้าสามัคคีแพคเกจคลิกนำเข้า

  5. ย้อนกลับไปใน Firebase คอนโซลในเวิร์กโฟลว์การติดตั้งคลิกถัดไป

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

Firebase สามัคคี 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. เลื่อนลงไปกรอบที่เชื่อมโยงและห้องสมุดแล้วคลิกปุ่ม + เพื่อเพิ่มกรอบ

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

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

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

  2. การแจ้งเตือนสวิทช์กดไปที่ On

  3. เลื่อนลงไปที่โหมดพื้นหลังแล้วสลับไปเมื่อวันที่

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

เริ่มต้นการรับส่งข้อความบนคลาวด์ของ Firebase

ห้องสมุด Firebase เมฆข้อความจะถูกเริ่มต้นเมื่อมีการเพิ่มตัวจัดการสำหรับทั้ง TokenReceived หรือ MessageReceived เหตุการณ์

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

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

การกำหนดค่าจุดเข้าใช้งานที่กำหนดเองActivity

ถ้า app ของคุณไม่ได้ใช้ค่าเริ่มต้น UnityPlayerActivity คุณจะต้องลบที่จัด AndroidManifest.xml และให้แน่ใจว่ากิจกรรมที่กำหนดเองของคุณอย่างถูกจัดการเปลี่ยนทั้งหมดของ Android กิจกรรม 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());
  // 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);
}

รุ่นใหม่ Firebase c ++ SDK (7.1.0 เป็นต้นไป) ใช้ JobIntentService ซึ่งจะต้องมีการปรับเปลี่ยนเพิ่มเติมใน AndroidManifest.xml ไฟล์

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

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

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

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

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