הגדר אפליקציית לקוח Firebase Cloud Messaging באנדרואיד

לקוחות FCM דורשים התקנים עם אנדרואיד 4.4 ומעלה שמותקנת בהם גם אפליקציית Google Play Store, או אמולטור שמריץ אנדרואיד 4.4 עם ממשקי API של Google. שים לב שאינך מוגבל לפריסת אפליקציות Android שלך דרך חנות Google Play.

הגדר את ה-SDK

חלק זה מכסה משימות שייתכן שהשלמת אם כבר הפעלת תכונות אחרות של Firebase עבור האפליקציה שלך. אם לא עשית זאת עדיין, להוסיף Firebase לפרויקט Android שלך

ערוך את מניפסט האפליקציה שלך

הוסף את הדברים הבאים למניפסט של האפליקציה שלך:

  • שירות המשתרע FirebaseMessagingService . זה נדרש אם ברצונך לבצע כל טיפול בהודעות מעבר לקבלת הודעות על אפליקציות ברקע. כדי לקבל התראות באפליקציות בחזית, כדי לקבל מטען נתונים, לשלוח הודעות במעלה הזרם וכן הלאה, עליך להרחיב את השירות הזה.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (אופציונלי) בתוך רכיב האפליקציה, רכיבי מטא נתונים כדי להגדיר סמל וצבע ברירת מחדל של התראות. אנדרואיד משתמשת בערכים אלה בכל פעם שהודעות נכנסות אינן מוגדרות במפורש סמל או צבע.
  • <!-- 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" />
  • (אופציונלי) מ 8.0 אנדרואיד (API ברמה 26) ומעלה, ערוצי ההודעה נתמכים והמליצה. FCM מספק ערוץ הודעות ברירת מחדל עם הגדרות בסיסיות. אם אתה מעדיף ליצור ולהשתמש ערוץ ברירת המחדל שלך, סט default_notification_channel_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

אפליקציות המסתמכות על ה-SDK של שירותי Play צריכות תמיד לבדוק את המכשיר עבור APK תואם לשירותי Google Play לפני גישה לתכונות שירותי Google Play. מומלץ לעשות זאת בשני מקומות: בפעילות העיקרית onCreate() שיטה, ובשינה שלה onResume() שיטה. בדיקת ב onCreate() מבטיח כי האפליקציה לא ניתן לעשות בהם שימוש ללא בדיקה מוצלחת. הבדיקה ב onResume() מבטיחה כי אם המשתמש חוזר האפליקציה פועלת באמצעות כמה אמצעים אחרים, כגון דרך הכפתור חזרה, שההמחאה עדיין מתבצעת.

אם המכשיר לא קיימת גרסה תואמת של שירותי Google Play, האפליקציה שלך יכול לקרוא GoogleApiAvailability.makeGooglePlayServicesAvailable() כדי לאפשר למשתמשים להוריד בשירותי Google Play מחנות Play.

מנע אתחול אוטומטי

כאשר נוצר אסימון רישום של FCM, הספרייה מעלה את המזהה ונתוני התצורה ל-Firebase. אם אתם מעדיפים למנוע אסימון autogeneration, אוסף Analytics להשבית אתחול אוטומטי FCM (עליך להשבית את שני) על ידי הוספת ערכים metadata האלה שלך 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, בצע שיחת זמן ריצה:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

קוטלין+KTX

Firebase.messaging.isAutoInitEnabled = true

כדי להפעיל מחדש את האוסף Analytics, קוראים setAnalyticsCollectionEnabled() שיטה של FirebaseAnalytics בכיתה. לדוגמה:

setAnalyticsCollectionEnabled(true);

ערכים אלה נמשכים בכל הפעלה מחדש של האפליקציה לאחר ההגדרה.

הצעדים הבאים

לאחר יישום הלקוח מוגדר, אתה מוכן להתחיל לשלוח הודעות במורד זרם עם מלחין ההודעות . פונקציונליות זו באה לידי ביטוי במדגם QuickStart , שבו אתה יכול להוריד, ריצה, וסקירה.

כדי להוסיף התנהגות אחרת ומתקדמת יותר לאפליקציה שלך, אתה יכול להכריז על מסנן כוונות וליישם פעילות כדי להגיב להודעות נכנסות. לפרטים, עיין במדריכים לשליחת הודעות משרת אפליקציות:

זכור כי, כדי לנצל את התכונות הללו, תצטרך יישום שרת ואת procotols השרת (HTTP או XMPP), או יישום של SDK של הניהול .