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 บน Android

การเขียน app ลูกค้าของคุณ Firebase Cloud Messaging Android ใช้ FirebaseMessaging API และ Android Studio 1.4 หรือสูงกว่า ด้วย Gradle คำแนะนำในหน้านี้สมมติว่าคุณได้เสร็จสิ้นขั้นตอนสำหรับ การเพิ่ม Firebase กับโครงการ Android ของคุณ

ไคลเอ็นต์ FCM ต้องใช้อุปกรณ์ที่ใช้ Android 4.1 หรือสูงกว่าที่ติดตั้งแอป Google Play Store หรือโปรแกรมจำลองที่ใช้ Android 4.1 ที่มี Google API โปรดทราบว่าคุณไม่ได้ถูกจำกัดให้ปรับใช้แอพ Android ของคุณผ่าน Google Play Store

ตั้งค่า SDK

ส่วนนี้ครอบคลุมงานที่คุณอาจทำเสร็จแล้ว หากคุณได้เปิดใช้งานคุณลักษณะ Firebase อื่นๆ สำหรับแอปของคุณแล้ว

ก่อนจะเริ่ม

  • ติดตั้งหรือปรับปรุง Android สตูดิโอ กับรุ่นใหม่ล่าสุดของ

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

    • เป้าหมาย API ระดับ 16 (Jelly Bean) หรือสูงกว่า
    • ใช้ Android 4.1 หรือสูงกว่า
    • ใช้ Jetpack (AndroidX) ซึ่งรวมถึงการประชุมความต้องการรุ่นเหล่านี้:
      • com.android.tools.build:gradle v3.2.1 หรือในภายหลัง
      • compileSdkVersion 28 หรือในภายหลัง
  • ตั้งค่าอุปกรณ์ทางกายภาพหรือใช้ โปรแกรมจำลอง การทำงานของแอป
    โปรดทราบว่า Firebase SDKs กับการพึ่งพาบริการ Google Play ของคุณ ต้องใช้อุปกรณ์หรือโปรแกรมจำลองจะมีบริการ Google Play ติดตั้ง

  • ลงชื่อเข้าใช้ Firebase ใช้บัญชี Google ของคุณ

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

สร้างโปรเจ็กต์ Firebase

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

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

หากต้องการใช้ Firebase ในแอป Android คุณต้องลงทะเบียนแอปกับโปรเจ็กต์ Firebase การลงทะเบียนแอพของคุณมักจะเรียกว่า "การเพิ่ม" แอพของคุณในโครงการของคุณ

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

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

  3. ใส่ชื่อแพคเกจของแอปใน Android ฟิลด์ชื่อแพคเกจ

  4. (อุปกรณ์เสริม) ป้อนข้อมูลตรวจสอบอื่น ๆ : ชื่อเล่น App และหนังสือรับรองการลงนาม Debug SHA-1

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

เพิ่มไฟล์การกำหนดค่า Firebase

  1. เพิ่มไฟล์การกำหนดค่า Firebase Android ในแอปของคุณ:

    1. คลิกดาวน์โหลด google-services.json ที่จะได้รับไฟล์ config ของคุณ Firebase Android ( google-services.json )

    2. ย้ายไฟล์ปรับแต่งของคุณไปที่ไดเร็กทอรีโมดูล (ระดับแอป) ของแอปของคุณ

  2. ต้องการเปิดใช้งานผลิตภัณฑ์ Firebase ใน app ของคุณเพิ่ม google-บริการปลั๊กอิน ไปยังไฟล์ Gradle ของคุณ

    1. ในระดับรากของคุณ (ระดับโครงการ) ไฟล์ Gradle ( build.gradle ), เพิ่มกฎระเบียบที่จะรวมปลั๊กอิน Google บริการ Gradle ตรวจสอบว่าคุณมีที่เก็บ Maven ของ Google ด้วย

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.10'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. ในโมดูลของคุณ (app ระดับ) ไฟล์ Gradle (ปกติ app/build.gradle ) ใช้ปลั๊กอิน Google บริการ Gradle:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

เพิ่ม Firebase SDK ให้กับแอปของคุณ

  1. ใช้ Firebase Android BoM ประกาศพึ่งพาสำหรับห้องสมุด Firebase Cloud Messaging Android ในโมดูลของคุณ (app ระดับ) ไฟล์ Gradle (ปกติ app/build.gradle )

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

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

    โดยใช้ Firebase Android BoM แอปของคุณมักจะใช้รุ่นที่รองรับการห้องสมุด Firebase Android

    (ทางเลือก) ประกาศ Firebase อ้างอิงห้องสมุดโดยไม่ต้องใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการพึ่งพา

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

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging:22.0.0'
        implementation 'com.google.firebase:firebase-analytics:19.0.2'
    }
    

    คอตลิน+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.4.2')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    โดยใช้ Firebase Android BoM แอปของคุณมักจะใช้รุ่นที่รองรับการห้องสมุด Firebase Android

    (ทางเลือก) ประกาศ Firebase อ้างอิงห้องสมุดโดยไม่ต้องใช้ BoM

    หากคุณเลือกที่จะไม่ใช้ Firebase BoM คุณต้องระบุเวอร์ชันไลบรารี Firebase แต่ละเวอร์ชันในบรรทัดการพึ่งพา

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

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx:22.0.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:19.0.2'
    }
    

  2. ซิงค์แอปของคุณเพื่อให้แน่ใจว่าการขึ้นต่อกันทั้งหมดมีเวอร์ชันที่จำเป็น

แก้ไขรายการแอปของคุณ

เพิ่มรายการต่อไปนี้ลงในรายการของแอปของคุณ:

  • มีบริการที่ขยาย FirebaseMessagingService นี่เป็นสิ่งจำเป็นหากคุณต้องการจัดการข้อความใด ๆ นอกเหนือจากการรับการแจ้งเตือนบนแอพในพื้นหลัง หากต้องการรับการแจ้งเตือนในแอพเบื้องหน้า รับข้อมูลเพย์โหลด ส่งข้อความอัปสตรีม และอื่นๆ คุณต้องขยายบริการนี้
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (ไม่บังคับ) ภายในองค์ประกอบแอปพลิเคชัน องค์ประกอบข้อมูลเมตาเพื่อตั้งค่าไอคอนและสีการแจ้งเตือนเริ่มต้น Android ใช้ค่าเหล่านี้เมื่อใดก็ตามที่ข้อความขาเข้าไม่ได้กำหนดไอคอนหรือสีไว้อย่างชัดเจน
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (อุปกรณ์เสริม) จาก Android 8.0 (API ระดับ 26) และสูงกว่า ช่องทางแจ้งเตือน ได้รับการสนับสนุนและแนะนำ FCM ให้ช่องการแจ้งเตือนเริ่มต้นพร้อมการตั้งค่าพื้นฐาน ถ้าคุณต้องการ สร้าง และใช้ช่องเริ่มต้นของคุณเองชุด default_notification_channel_id กับ ID ของวัตถุช่องทางแจ้งเตือนของคุณตามที่แสดง; FCM จะใช้ค่านี้เมื่อใดก็ตามที่ข้อความขาเข้าไม่ได้ตั้งค่าช่องทางการแจ้งเตือนอย่างชัดเจน ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ การจัดการช่องการแจ้งเตือน
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

เข้าถึงโทเค็นการลงทะเบียนอุปกรณ์

เมื่อเริ่มต้นแอปของคุณเป็นครั้งแรก FCM SDK จะสร้างโทเค็นการลงทะเบียนสำหรับอินสแตนซ์แอปไคลเอ็นต์ หากคุณต้องการที่จะกำหนดเป้าหมายอุปกรณ์เดียวหรือสร้างกลุ่มอุปกรณ์คุณจะต้องเข้าถึงโทเค็นนี้โดยการขยาย FirebaseMessagingService และเอาชนะ onNewToken

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

โทเค็นการลงทะเบียนอาจเปลี่ยนแปลงเมื่อ:

  • แอพถูกกู้คืนบนอุปกรณ์ใหม่
  • ผู้ใช้ถอนการติดตั้ง/ติดตั้งแอปอีกครั้ง
  • ผู้ใช้ล้างข้อมูลแอป

รับโทเค็นการลงทะเบียนปัจจุบัน

เมื่อคุณจำเป็นต้องเรียกโทเค็นปัจจุบันเรียก FirebaseMessaging.getInstance().getToken() :

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

คอตลิน+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

ตรวจสอบการสร้างโทเค็น

onNewToken ไฟโทรกลับเมื่อใดก็ตามที่โทเค็นใหม่จะถูกสร้างขึ้น

Java

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

คอตลิน+KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

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

ตรวจสอบบริการ Google Play

แอปที่ใช้ Play Services SDK ควรตรวจสอบอุปกรณ์เพื่อหา APK บริการ Google Play ที่เข้ากันได้ก่อนที่จะเข้าถึงคุณลักษณะบริการ Google Play ก็จะแนะนำให้ทำเช่นนี้ในสองสถานที่: ในกิจกรรมหลักของ onCreate() วิธีการและในของ onResume() วิธีการ การตรวจสอบใน onCreate() เพื่อให้แน่ใจว่าแอปไม่สามารถใช้งานได้โดยไม่ต้องมีการตรวจสอบที่ประสบความสำเร็จ การตรวจสอบใน onResume() เพื่อให้แน่ใจว่าถ้าผู้ใช้กลับไปยังแอปทำงานด้วยวิธีการอื่น ๆ เช่นผ่านปุ่มย้อนกลับการตรวจสอบจะดำเนินการยังคง

หากอุปกรณ์ไม่ได้มีรุ่นที่รองรับการบริการ Google Play แอปของคุณสามารถเรียก GoogleApiAvailability.makeGooglePlayServicesAvailable() เพื่อให้ผู้ใช้ดาวน์โหลดบริการ Google Play จาก Play สโตร์

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

เมื่อมีการสร้างโทเค็นการลงทะเบียน FCM ไลบรารีจะอัปโหลดตัวระบุและข้อมูลการกำหนดค่าไปยัง Firebase ถ้าคุณต้องการที่จะป้องกันไม่ให้การสร้างอัตโนมัติโทเค็น, คอลเลกชัน Analytics ปิดการใช้งานและการเริ่มต้น FCM อัตโนมัติ (คุณต้องปิดการใช้งานทั้งสอง) โดยการเพิ่มค่าข้อมูลเมตาเหล่านี้ที่คุณ AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

หากต้องการเปิดใช้งาน FCM auto-init อีกครั้ง ให้เรียกใช้รันไทม์:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

คอตลิน+KTX

Firebase.messaging.isAutoInitEnabled = true

เพื่อเปิดใช้งานคอลเลกชัน Analytics โทร setAnalyticsCollectionEnabled() วิธีการ FirebaseAnalytics ระดับ ตัวอย่างเช่น:

setAnalyticsCollectionEnabled(true);

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

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

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

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

เก็บไว้ในใจว่าจะใช้ประโยชน์จากคุณลักษณะเหล่านี้คุณจะต้องมี การใช้งานเซิร์ฟเวอร์ และ procotols เซิร์ฟเวอร์ (HTTP หรือ XMPP) หรือการดำเนินการของ SDK ผู้ดูแลระบบ