การเริ่มต้นอย่างรวดเร็วนี้อธิบายวิธีตั้งค่า Firebase Cloud Messaging ในแอปไคลเอ็นต์บนอุปกรณ์เคลื่อนที่และเว็บ เพื่อให้คุณส่งข้อความได้อย่างน่าเชื่อถือ สำหรับสภาพแวดล้อมของเซิร์ฟเวอร์ โปรดดูสภาพแวดล้อมของเซิร์ฟเวอร์และ
FCM
ตั้งค่าFirebase Cloud Messagingแอปไคลเอ็นต์ด้วย Unity
หากต้องการเขียนFirebase Cloud Messagingแอปไคลเอ็นต์ข้ามแพลตฟอร์มด้วย Unity ให้ใช้ API ของ Firebase Cloud Messaging Unity SDK ใช้ได้กับทั้ง Android และ Apple โดยต้องมีการตั้งค่าเพิ่มเติมสำหรับแต่ละแพลตฟอร์ม
ก่อนเริ่มต้น
ข้อกำหนดเบื้องต้น
ติดตั้ง Unity 2021 LTS ขึ้นไป เราถือว่าการรองรับ Unity 2020 เป็นเวอร์ชันที่เลิกใช้งานแล้ว และจะไม่รองรับอย่างเต็มที่อีกต่อไปหลังจาก การเปิดตัวเวอร์ชันหลักครั้งถัดไป เวอร์ชันก่อนหน้าอาจใช้งานร่วมกันได้ แต่จะไม่ได้รับการสนับสนุนอย่างเต็มที่
(แพลตฟอร์ม Apple เท่านั้น) ติดตั้งสิ่งต่อไปนี้
- Xcode 13.3.1 ขึ้นไป
- CocoaPods 1.12.0 ขึ้นไป
ตรวจสอบว่าโปรเจ็กต์ Unity เป็นไปตามข้อกำหนดต่อไปนี้
- สำหรับ iOS - กำหนดเป้าหมายเป็น iOS 13 ขึ้นไป
- สำหรับ tvOS - กำหนดเป้าหมายเป็น tvOS 13 ขึ้นไป
- สำหรับ Android - กำหนดเป้าหมาย API ระดับ 21 (Lollipop) ขึ้นไป
ตั้งค่าอุปกรณ์หรือใช้โปรแกรมจำลองเพื่อเรียกใช้โปรเจ็กต์ Unity
สำหรับ iOS หรือ tvOS — ตั้งค่าอุปกรณ์จริงเพื่อเรียกใช้แอป และทําตามงานต่อไปนี้
- รับคีย์การตรวจสอบสิทธิ์การแจ้งเตือนแบบพุชของ Apple สำหรับบัญชีนักพัฒนาซอฟต์แวร์ของ Apple
- เปิดใช้ข้อความ Push ใน XCode ในส่วนแอป > ความสามารถ
สำหรับ Android - โปรแกรมจำลองต้องใช้ อิมเมจโปรแกรมจำลองที่มี Google Play
- ลงชื่อเข้าใช้ Firebase ด้วยบัญชี Google
หากยังไม่มีโปรเจ็กต์ Unity และเพียงต้องการลองใช้ผลิตภัณฑ์ Firebase คุณสามารถดาวน์โหลดตัวอย่างการเริ่มต้นใช้งานอย่างรวดเร็วของเรา
ขั้นตอนที่ 1: สร้างโปรเจ็กต์ Firebase
ก่อนที่จะเพิ่ม Firebase ลงในโปรเจ็กต์ Unity ได้ คุณต้องสร้างโปรเจ็กต์ Firebase เพื่อเชื่อมต่อกับโปรเจ็กต์ Unity ดูข้อมูลเพิ่มเติมเกี่ยวกับโปรเจ็กต์ Firebase ได้ที่ทำความเข้าใจโปรเจ็กต์ Firebase
ขั้นตอนที่ 2: ลงทะเบียนแอปกับ Firebase
คุณลงทะเบียนแอปหรือเกมอย่างน้อย 1 รายการเพื่อเชื่อมต่อกับโปรเจ็กต์ Firebase ได้
ไปที่คอนโซล Firebase
ที่กึ่งกลางหน้าภาพรวมโปรเจ็กต์ ให้คลิกไอคอน Unity (
) เพื่อเปิดเวิร์กโฟลว์การตั้งค่าหากเพิ่มแอปไปยังโปรเจ็กต์ Firebase แล้ว ให้คลิกเพิ่มแอป เพื่อแสดงตัวเลือกแพลตฟอร์ม
เลือกเป้าหมายของบิลด์โปรเจ็กต์ Unity ที่ต้องการลงทะเบียน หรือจะเลือกเพื่อลงทะเบียนทั้ง 2 เป้าหมายพร้อมกันเลยก็ได้
ป้อนรหัสเฉพาะแพลตฟอร์มของโปรเจ็กต์ Unity
สำหรับ iOS - ป้อนรหัส iOS ของโปรเจ็กต์ Unity ในช่องรหัสชุด iOS
สำหรับ Android - ป้อนรหัส Android ของโปรเจ็กต์ Unity ในช่องชื่อแพ็กเกจ Android
คำว่าชื่อแพ็กเกจและรหัสแอปพลิเคชันมักใช้แทนกันได้
(ไม่บังคับ) ป้อนชื่อเล่นเฉพาะแพลตฟอร์มของโปรเจ็กต์ Unity
ชื่อเล่นเหล่านี้เป็นตัวระบุภายในเพื่อความสะดวกและจะปรากฏให้คุณเห็นเท่านั้น ในคอนโซล Firebaseคลิกลงทะเบียนแอป
ขั้นตอนที่ 3: เพิ่มไฟล์การกำหนดค่า Firebase
รับไฟล์กำหนดค่า Firebase สำหรับแพลตฟอร์มของคุณใน Firebaseเวิร์กโฟลว์การตั้งค่าคอนโซล
สำหรับ iOS — คลิกดาวน์โหลด GoogleService-Info.plist
สำหรับ Android - คลิกดาวน์โหลด google-services.json
เปิดหน้าต่างโปรเจ็กต์ของโปรเจ็กต์ Unity จากนั้นย้ายไฟล์การกำหนดค่า ไปยังโฟลเดอร์
Assets
กลับไปที่คอนโซล Firebase ในเวิร์กโฟลว์การตั้งค่า ให้คลิกถัดไป
ขั้นตอนที่ 4: เพิ่ม Firebase Unity SDK
ในคอนโซล Firebase ให้คลิกดาวน์โหลด Firebase Unity SDK แล้วแตกไฟล์ SDK ในตำแหน่งที่สะดวก
คุณสามารถดาวน์โหลด Firebase Unity SDK อีกครั้งได้ทุกเมื่อ
Firebase Unity SDK ไม่ได้เจาะจงแพลตฟอร์ม
ในโปรเจ็กต์ Unity แบบเปิด ให้ไปที่ เนื้อหา > นำเข้าแพ็กเกจ > แพ็กเกจที่กำหนดเอง
เลือกผลิตภัณฑ์ Firebase ที่รองรับซึ่งต้องการใช้ในแอปจาก SDK ที่แยกไฟล์แล้ว
เราขอแนะนำให้เปิดใช้ Google Analytics ในโปรเจ็กต์ของคุณเพื่อให้ได้รับประสบการณ์การใช้งาน Firebase Cloud Messaging ที่ดีที่สุด นอกจากนี้ ในขั้นตอนการตั้งค่า Analytics คุณต้องเพิ่มแพ็กเกจ Firebase สำหรับ Analytics ลงในแอปด้วย
เปิดใช้ Analytics รายการ
- เพิ่มแพ็กเกจ Firebase สำหรับ Google Analytics:
FirebaseAnalytics.unitypackage
- เพิ่มแพ็กเกจสำหรับ Firebase Cloud Messaging
FirebaseMessaging.unitypackage
ไม่ได้เปิดใช้ Analytics
เพิ่มแพ็กเกจสำหรับ Firebase Cloud Messaging
FirebaseMessaging.unitypackage
- เพิ่มแพ็กเกจ Firebase สำหรับ Google Analytics:
คลิกนำเข้า ในหน้าต่างนำเข้าแพ็กเกจ Unity
กลับไปที่คอนโซล Firebase ในเวิร์กโฟลว์การตั้งค่า ให้คลิกถัดไป
ขั้นตอนที่ 5: ยืนยันข้อกำหนดด้านเวอร์ชันของบริการ Google Play
ผลิตภัณฑ์บางอย่างใน Firebase Unity SDK สำหรับ Android ต้องใช้ Google Play services ดูผลิตภัณฑ์ที่มีทรัพยากร Dependency นี้ Google Play services ต้องเป็นเวอร์ชันล่าสุดก่อนจึงจะใช้ผลิตภัณฑ์เหล่านั้นได้
เพิ่มคำสั่ง using
และโค้ดการเริ่มต้นต่อไปนี้ที่จุดเริ่มต้นของแอปพลิเคชัน
คุณสามารถตรวจสอบและอัปเดต Google Play services เป็นเวอร์ชันที่
จำเป็นได้ก่อนที่จะเรียกใช้เมธอดอื่นๆ ใน SDK
using Firebase.Extensions;
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(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 แล้ว
ตั้งค่าด้วยแพลตฟอร์มของ Apple
ใช้วิธีการต่อไปนี้เพื่อตั้งค่า FCM ด้วยแพลตฟอร์ม Unity และ Apple
อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs
อัปโหลดคีย์การตรวจสอบสิทธิ์ APNs ไปยัง Firebase หากยังไม่มีคีย์การตรวจสอบสิทธิ์ APNs โปรดสร้างคีย์ใน Apple Developer Member Center
-
ภายในโปรเจ็กต์ในFirebaseคอนโซล ให้เลือกไอคอน รูปเฟือง เลือก การตั้งค่าโปรเจ็กต์ แล้วเลือกแท็บ Cloud Messaging
-
ในคีย์การตรวจสอบสิทธิ์ APNs ภายในการกำหนดค่าแอป iOS คลิกปุ่มอัปโหลดเพื่ออัปโหลดคีย์การตรวจสอบสิทธิ์สำหรับการพัฒนา หรือ คีย์การตรวจสอบสิทธิ์สำหรับการใช้งานจริง หรือทั้ง 2 อย่าง ต้องระบุอย่างน้อย 1 รายการ
-
เรียกดูตำแหน่งที่คุณบันทึกคีย์ เลือกคีย์ แล้วคลิกเปิด เพิ่มรหัสคีย์สำหรับคีย์ (มีอยู่ใน ศูนย์สมาชิกนักพัฒนาซอฟต์แวร์ของ Apple) แล้วคลิก อัปโหลด
เปิดใช้ข้อความ Push ในแพลตฟอร์ม Apple
- คลิกโปรเจ็กต์ใน Xcode แล้วเลือกแท็บทั่วไปจาก พื้นที่แก้ไข
- เลื่อนไปที่เฟรมเวิร์กและไลบรารีที่ลิงก์ แล้วคลิกปุ่ม + เพื่อเพิ่มเฟรมเวิร์ก
- ในหน้าต่างที่ปรากฏขึ้น ให้เลื่อนไปที่ UserNotifications.framework คลิกรายการนั้น แล้วคลิกเพิ่ม
- คลิกโปรเจ็กต์ใน Xcode แล้วเลือกแท็บความสามารถจาก พื้นที่แก้ไข
- เปลี่ยนข้อความ Push เป็นเปิด
- เลื่อนไปที่โหมดเบื้องหลัง แล้วเปลี่ยนเป็นเปิด
- เลือกช่องทําเครื่องหมายการแจ้งเตือนจากระยะไกลในส่วนโหมดพื้นหลัง
เริ่มต้น 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
ใช้วิธีการต่อไปนี้เพื่อตั้งค่า FCM ด้วยแพลตฟอร์ม Unity และ Android
กำหนดค่ากิจกรรมจุดแรกเข้าของ Android
Firebase Cloud Messaging มาพร้อมกับจุดแรกเข้าที่กำหนดเอง
กิจกรรมที่แทนที่ UnityPlayerActivity
เริ่มต้น หากคุณไม่ได้ใช้
จุดแรกเข้าที่กำหนดเอง การแทนที่นี้จะเกิดขึ้นโดยอัตโนมัติและคุณไม่ควร
ต้องดำเนินการใดๆ เพิ่มเติม
Firebase Cloud Messagingปลั๊กอิน Unity ใน Android มาพร้อมกับไฟล์เพิ่มเติม 2 ไฟล์ ได้แก่
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 ได้อย่างถูกต้อง
(ตัวอย่างวิธีดำเนินการแสดงอยู่ด้านล่าง) หากกิจกรรมที่กำหนดเองขยาย
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 earlier 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 makes sure 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 โดยค่าเริ่มต้น
ในกรณีนี้ ระบบจะรับเพย์โหลดของข้อความผ่าน Intent
ที่ใช้เพื่อเริ่มแอปพลิเคชัน
ข้อความที่ได้รับขณะที่แอปทำงานในเบื้องหลังจะมีเนื้อหาของฟิลด์การแจ้งเตือนที่ใช้ในการแสดงการแจ้งเตือนในถาดระบบ แต่จะไม่ส่งเนื้อหาการแจ้งเตือนนั้นไปยัง FCM ซึ่งหมายความว่า
FirebaseMessage.Notification
จะเป็นค่าว่าง
บทสรุปมีดังนี้:
สถานะของแอป | การแจ้งเตือน | ข้อมูล | ทั้งสอง |
---|---|---|---|
พื้นหน้า | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
Firebase.Messaging.FirebaseMessaging.MessageReceived |
ข้อมูลเบื้องต้น | ถาดระบบ | Firebase.Messaging.FirebaseMessaging.MessageReceived |
การแจ้งเตือน: ถาดระบบ ข้อมูล: ในส่วนพิเศษของ Intent |
การจัดการข้อความที่มี Deep Link ใน Android
FCM อนุญาตให้ส่งข้อความที่มี Deep Link ไปยังแอปของคุณ หากต้องการรับข้อความที่มี Deep Link คุณต้องเพิ่มตัวกรอง Intent ใหม่ ไปยังกิจกรรมที่จัดการ Deep Link สำหรับแอปของคุณ ตัวกรอง Intent ควร จับ 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 มีความยืดหยุ่นมากขึ้นได้ด้วย เช่น
<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>
เมื่อผู้ใช้แตะการแจ้งเตือนที่มีลิงก์ไปยังรูปแบบและโฮสต์ที่คุณระบุ แอปจะเริ่มกิจกรรมด้วยตัวกรอง Intent นี้เพื่อจัดการลิงก์
ป้องกันการเริ่มต้นอัตโนมัติ
FCM สร้างโทเค็นการลงทะเบียนสำหรับการกำหนดเป้าหมายอุปกรณ์
เมื่อสร้างโทเค็น ไลบรารีจะอัปโหลดตัวระบุและข้อมูลการกำหนดค่าไปยัง Firebase หากต้องการรับการเลือกใช้ที่ชัดเจนก่อนใช้โทเค็น คุณสามารถป้องกันการสร้างโทเค็นในเวลาที่กำหนดค่าได้โดยการปิดใช้ FCM (และใน Android ให้ปิดใช้ Analytics) คุณเพิ่มค่าข้อมูลเมตาลงใน
Info.plist
(ไม่ใช่ GoogleService-Info.plist
) ใน Apple หรือ
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>
Swift
FirebaseMessagingAutoInitEnabled = NO
หากต้องการเปิดใช้ FCM อีกครั้ง คุณสามารถทำการเรียกใช้รันไทม์ได้โดยทำดังนี้
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
ค่านี้จะยังคงอยู่เมื่อรีสตาร์ทแอปเมื่อตั้งค่าแล้ว
ขั้นตอนถัดไป
หลังจากทำตามขั้นตอนการตั้งค่าเสร็จแล้ว คุณมีตัวเลือกต่อไปนี้ในการดำเนินการต่อด้วย FCM สำหรับ Unity