Google 致力于为黑人社区推动种族平等。查看具体举措
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ตั้งค่าแอปไคลเอ็นต์ Firebase Cloud Messaging บน Android

หากต้องการเขียนแอปไคลเอ็นต์ 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 Studio เป็นเวอร์ชันล่าสุด

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

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

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

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

สร้างโครงการ Firebase

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

ลงทะเบียนแอปของคุณกับ Firebase

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

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

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

  3. ป้อนชื่อแพ็กเกจของแอปของคุณในช่อง ชื่อแพ็กเกจ Android

  4. (ไม่บังคับ) ป้อนข้อมูลแอปอื่น ๆ : ชื่อเล่นแอป และ ใบรับรองการลงนามการแก้ไขข้อบกพร่อง SHA-1

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

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

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

    1. คลิก ดาวน์โหลด google-services.json เพื่อรับไฟล์กำหนดค่า Firebase Android ( google-services.json )

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

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

    1. ในไฟล์ build.gradle ระดับรูท (ระดับโปรเจ็กต์) ( build.gradle ) ให้เพิ่มกฎเพื่อรวมปลั๊กอิน Google Services 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.5'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. ในโมดูลของคุณ (ระดับแอป) ไฟล์ Gradle (โดยทั่วไปคือ app/build.gradle ) ให้ใช้ปลั๊กอิน Google Services 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 ใน ไฟล์ Gradle ของ โมดูล (ระดับแอป) (โดยทั่วไปคือ app/build.gradle )

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

    Java

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.6.0')
    
        // 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:21.0.1'
        implementation 'com.google.firebase:firebase-analytics:18.0.2'
    }
    

    โคตรลิน + KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:26.6.0')
    
        // 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:21.0.1'
        implementation 'com.google.firebase:firebase-analytics-ktx:18.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 เริ่ม 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 Store

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

เมื่อสร้างโทเค็นการลงทะเบียน 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);

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

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

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

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

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