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 באמצעות C ++

כדי לכתוב אפליקציה הלקוח Cloud Messaging בפלטפורמות Firebase שלך עם C ++, להשתמש Firebase Cloud Messaging API. C ++ SDK פועל הן לאנדרואיד והן ל- iOS, ויש צורך בהתקנה נוספת לכל פלטפורמה.

הגדר את Firebase ואת ה- FCM SDK

דְמוּי אָדָם

  1. אם עדיין אין לך חשבון, להוסיף Firebase ל- C ++ לפרויקט שלך .

    • בהוראות ההתקנה המקושרות, עיין בדרישות המכשיר והאפליקציה לשימוש ב- SDB Firebase C ++, כולל ההמלצה להשתמש ב- CMake לבניית האפליקציה שלך.

    • בפרויקט ברמה שלך build.gradle הקובץ, הקפד לכלול מאגר מייבן של גוגל היא שלך buildscript ו allprojects סעיפים.

  2. יצירת אובייקט App Firebase, עובר בסביבה JNI ופעילות:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. להגדיר מחלקה המיישמת את firebase::messaging::Listener ממשק.

  4. Initialize FCM, עובר את App מאזין נבנה:

    ::firebase::messaging::Initialize(app, listener);

  5. אפליקציות המסתמכות על ה- SDK של שירותי Google Play צריכות לבדוק במכשיר את ה- APK התואם של שירותי Google Play לפני הגישה לתכונות. כדי ללמוד עוד, ראה בדוק APK בשירותי Google Play .

iOS

  1. אתה צריך תקף APNs תעודה. אם אין לך כבר אחד, הקפד ליצור אחד המפתחים של אפל חבר המרכז .
  2. אם עדיין אין לך חשבון, להוסיף Firebase ל- C ++ לפרויקט שלך . לאחר מכן, כדי להגדיר את הפרויקט שלך עבור FCM:
    1. בשנת Podfile של הפרויקט שלך, להוסיף את התלות FCM:
      pod 'Firebase/Messaging'
    2. גרור את firebase.framework ו firebase_messaging.framework מסגרות לתוך הפרויקט Xcode שלך מפני SDK Firebase C ++ .
  3. הגדר את פרויקט ה- Xcode שלך ​​כדי לאפשר הודעות Push:

    1. בחר בפרוייקט מאזור Navigator.
    2. בחר את יעד פרויקט מאזור העורך.
    3. בחר את הכרטיסייה הכללית מאזור העורך.

      1. גלול למטה אל מסגרות מקושרים וספריות, ולאחר מכן לחץ על הלחצן + להוסיף מסגרות.
      2. בחלון שמופיע, גלול אל UserNotifications.framework, לחץ על הרשומה, ולאחר מכן לחץ על הוספה.

        מסגרת זו מופיעה רק ב- Xcode v8 ואילך והיא נדרשת על ידי ספרייה זו.

    4. בחר את הכרטיסייה יכול מאזור העורך.

      1. החלף להודעות דחיפה למצב On.
      2. גלול למטה כדי רקע מצבי, ואז לעבור אותו ביום.
      3. בחר התראות מרחוק תחת מצבי רקע.
  4. יצירת אובייקט App Firebase:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. להגדיר מחלקה המיישמת את firebase::messaging::Listener ממשק.

  6. Initialize Firebase Cloud Messaging, עובר את App מאזין נבנה:

    ::firebase::messaging::Initialize(app, listener);

גש לאסימון רישום המכשיר

עם אתחול הספרייה של Firebase Cloud Messaging, מתבקש אסימון הרשמה למופע של אפליקציית הלקוח. האפליקציה תקבל את האסימון עם OnTokenReceived ההתקשרות, אשר אמור להיות מוגדרת בכיתה מיישמת firebase::messaging::Listener .

אם אתה רוצה למקד את המכשיר הספציפי הזה, תזדקק לגישה לאסימון זה.

הערה בנוגע למסירת הודעות באנדרואיד

כאשר האפליקציה לא פועלת כלל והמשתמש לוחץ על הודעה, ההודעה לא מנותבת כברירת מחדל באמצעות שיחות החזרה המובנות של FCM. במקרה זה, מטעני הודעה מתקבלים דרך Intent להשתמש כדי להפעיל את היישום. כדי לקבל FCM קדימה הודעות נכנסות אלה אל C ++ התקשרות הספרייה, אתה צריך לעקוף את השיטה onNewIntent ב פעילות שלך ולהעביר את Intent אל MessageForwardingService .

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    Intent message = new Intent(this, MessageForwardingService.class);
    message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
    message.putExtras(intent);
    message.setData(intent.getData());
    // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`.
    // startService(message);
    MessageForwardingService.enqueueWork(this, message);
  }
}

הודעות המתקבלות כשהאפליקציה נמצאת ברקע מכילות את תוכן שדה ההודעות שלהן כדי לאכלס את הודעת מגש המערכת, אך תוכן ההודעה לא יועבר ל- FCM. כלומר, Message::notification תהיה בטלה.

לסיכום:

מצב אפליקציה הוֹדָעָה נתונים שניהם
חֲזִית OnMessageReceived OnMessageReceived OnMessageReceived
רקע כללי מגש מערכת OnMessageReceived הודעה: מגש מערכת
נתונים: בתוספות של הכוונה.

טיפול בהודעות מותאם אישית באנדרואיד

כברירת מחדל, הודעות שנשלחו אל היישום המועברים ::firebase::messaging::Listener::OnMessageReceived , אך במקרים מסוימים ייתכן שתרצה לעקוף את התנהגות ברירת המחדל. לשם כך על אנדרואיד תצטרך לכתוב כיתות מנהג שמרחיבים com.google.firebase.messaging.cpp.ListenerService כמו גם עדכון של הפרויקט שלך AndroidManifest.xml .

דרוס ListenerService שיטות.

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

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

על ידי דריסה של המתודה ListenerService.onMessageReceived , אתה יכול לבצע פעולות על בסיס קיבל RemoteMessage אובייקט ולקבל את הנתונים מסר:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService יש גם כמה שיטות אחרות המשמשות בתדירות נמוכה יותר. אלה יכולים להיות מבוטלים גם, לקבלת מידע נוסף ראה FirebaseMessagingService ההפניה.

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

עדכון AndroidManifest.xml

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

בשנות ה firebase_messaging_cpp.aar ארכיון קיימת AndroidManifest.xml קובץ אשר מצהיר ברירת המחדל של FCM ListenerService . מניפסט זה התמזג בדרך כלל עם ספציפיים פרויקט המניפסט הוא כיצד ListenerService הוא מסוגל לרוץ. זה ListenerService צריך מוחלף עם שירות מאזין cusom. זה מושג על ידי הסרת המחדל ListenerService והוסיף השירות המותאם אישית, אשר ניתן לעשות עם השורות הבאות הפרויקטים שלך AndroidManifest.xml קובץ:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

גירסאות חדשות של 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>

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

FCM מייצר אסימון הרשמה למיקוד מכשירים. כאשר נוצר אסימון, הספרייה מעלה את המזהה ונתוני התצורה ל- Firebase. אם ברצונך לקבל הסכמה מפורשת לפני השימוש באסימון, תוכל למנוע ייצור בזמן התצורה על ידי השבתת FCM (וב- Android, Analytics). כדי לעשות זאת, להוסיף ערך metadata כדי שלך Info.plist (לא שלך GoogleService-Info.plist ) על iOS, או שלך AndroidManifest.xml על אנדרואיד:

דְמוּי אָדָם

<?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>

iOS

FirebaseMessagingAutoInitEnabled = NO

כדי להפעיל מחדש את FCM, תוכל לבצע שיחת זמן ריצה:

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

ערך זה נמשך בכל הפעלה מחדש של אפליקציות לאחר שהוגדרה.

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

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

הצעדים הבאים

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

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

זכור כי עליך להשתמש ביישום שרת כדי לעשות שימוש בתכונות אלה.