Google มุ่งมั่นที่จะก้าวทุนเชื้อชาติชุมชนสีดำ มาดูกันว่า
หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ตั้งค่า app ลูกค้า Firebase Cloud Messaging บน Android

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

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

ตั้งค่าการใช้ SDK

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

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

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

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

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

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

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

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

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

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

หลังจากที่คุณมีโครงการ Firebase คุณสามารถเพิ่มแอป Android ของคุณไป

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

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

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

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

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

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

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

เพิ่มการตั้งค่าไฟล์ Firebase

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

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

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

  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.3'  // 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. โมดูลของคุณ (app ระดับ) ไฟล์ Gradle (ปกติ app/build.gradle ), เพิ่มการอ้างอิงสำหรับผลิตภัณฑ์ Firebase ที่คุณต้องการใช้ในแอปของคุณ

    คุณสามารถเพิ่มใด ๆ ของ ผลิตภัณฑ์ Firebase สนับสนุน ไปยังแอป Android ของคุณ

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

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

    dependencies {
      // ...
    // Add the Firebase SDK for Google Analytics implementation 'com.google.firebase:firebase-analytics:17.4.4'
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.4'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }

    Analytics ไม่ได้เปิดใช้

    dependencies {
      // ...
    // Add the SDK for Firebase Cloud Messaging implementation 'com.google.firebase:firebase-messaging:20.2.4'
    // Getting a "Could not find" error? Make sure that you've added // Google's Maven repository to your root-level build.gradle file }
  2. ซิงค์แอปของคุณเพื่อให้แน่ใจว่าการอ้างอิงทั้งหมดมีรุ่นที่จำเป็น

  3. หากคุณเพิ่ม Analytics ซึ่งใช้ app ของคุณเพื่อส่งตรวจสอบเพื่อ Firebase ว่าคุณได้รวมประสบความสำเร็จ Firebase มิฉะนั้นคุณสามารถข้ามขั้นตอนการตรวจสอบ

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

แก้ไขที่ประจักษ์ของแอป

เพิ่มต่อไปนี้เพื่อแอปของคุณอย่างชัดแจ้ง

  • มีบริการที่ขยาย FirebaseMessagingService นี้เป็นสิ่งจำเป็นถ้าคุณต้องการที่จะทำจัดการข้อความใด ๆ ที่นอกเหนือจากที่ได้รับการแจ้งเตือนเกี่ยวกับการปพลิเคชันในพื้นหลัง จะได้รับการแจ้งเตือนในแอพพลิเค foregrounded เพื่อให้ได้รับข้อมูลที่บรรจุในการส่งข้อความต้นน้ำและอื่น ๆ คุณจะต้องขยายการให้บริการนี้
  • <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

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

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

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

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

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

ชวา

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

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

Kotlin + KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // 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 ไฟโทรกลับเมื่อใดก็ตามที่โทเค็นใหม่จะถูกสร้างขึ้น

ชวา

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID token
 * is initially generated so this is where you would retrieve the token.
 */
@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
    // Instance ID token to your app server.
    sendRegistrationToServer(token);
}

Kotlin + KTX

/**
 * Called if InstanceID token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the InstanceID 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
    // Instance ID token to your app server.
    sendRegistrationToServer(token)
}

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

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

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

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

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

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

ชวา

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin + KTX

FirebaseMessaging.getInstance().isAutoInitEnabled = true

ค่านี้จะยังคงมีอยู่ทั่วเตะแอปครั้งหนึ่งชุด

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

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

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

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