این شروع سریع نحوه راهاندازی Firebase Cloud Messaging را در برنامههای تلفن همراه و کلاینت وب خود توضیح میدهد تا بتوانید به طور قابل اعتماد پیام ارسال کنید. برای محیط های سرور، محیط سرور شما و FCM را ببینید.
یک برنامه مشتری Firebase Cloud Messaging با C ++ تنظیم کنید
برای نوشتن برنامه مشتری Firebase Cloud Messaging Platform خود با C ++ ، از API Firebase Cloud Messaging استفاده کنید. C ++ SDK برای هر دو سیستم عامل Android و Apple کار می کند و برخی از تنظیمات اضافی برای هر سیستم عامل مورد نیاز است.
Firebase و FCM SDK را تنظیم کنید
اندروید
اگر قبلاً این کار را نکرده اید ، Firebase را به پروژه C ++ خود اضافه کنید .
در دستورالعمل های تنظیم پیوند ، دستگاه و برنامه مورد نیاز برنامه را برای استفاده از Firebase C++ SDK ، از جمله توصیه استفاده از Cmake برای ساخت برنامه خود ، مرور کنید.
در فایل
build.gradle
در سطح پروژه خود، مطمئن شوید که مخزن Maven Google را در هر دو بخشbuildscript
وallprojects
خود قرار دهید.
یک شیء برنامه Firebase ایجاد کنید و در محیط و فعالیت JNI عبور کنید:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
کلاس را تعریف کنید که
firebase::messaging::Listener
را پیاده سازی می کند.اولیه سازی FCM ، عبور در برنامه و یک شنونده ساخته شده:
::firebase::messaging::Initialize(app, listener);
برنامه هایی که به Google Play Services SDK متکی هستند باید قبل از دسترسی به ویژگی ها ، دستگاه را برای یک سرویس سازگار Google Play APK بررسی کنند. برای کسب اطلاعات بیشتر ، به بررسی خدمات Google Play APK مراجعه کنید.
iOS+
- اگر قبلاً این کار را نکرده اید ، Firebase را به پروژه C ++ خود اضافه کنید . سپس ، برای تنظیم پروژه خود برای FCM :
- در Podfile پروژه خود ، وابستگی FCM را اضافه کنید:
pod 'FirebaseMessaging'
-
firebase.framework
وfirebase_messaging.framework
را به پروژه Xcode خود از Firebase C++ SDK بکشید.
- در Podfile پروژه خود ، وابستگی FCM را اضافه کنید:
کلید احراز هویت APN خود را در Firebase بارگذاری کنید. اگر قبلاً کلید احراز هویت APNS ندارید ، حتماً یکی از آنها را در مرکز عضو توسعه دهنده اپل ایجاد کنید.
در داخل پروژه خود در کنسول Firebase ، نماد Gear را انتخاب کنید ، تنظیمات پروژه را انتخاب کنید و سپس برگه Cloud Messaging را انتخاب کنید.
در کلید تأیید هویت APNS تحت پیکربندی برنامه iOS ، روی دکمه بارگذاری کلیک کنید تا کلید احراز هویت توسعه یا کلید احراز هویت تولید یا هر دو را بارگذاری کنید. حداقل یک مورد لازم است.
به مکانی که کلید خود را ذخیره کرده اید ، آن را انتخاب کرده و روی Open کلیک کنید. شناسه کلید را برای کلید (موجود در مرکز عضو توسعه دهنده اپل ) اضافه کنید و روی بارگذاری کلیک کنید.
پروژه Xcode خود را پیکربندی کنید تا اعلان های فشار را فعال کنید:
- پروژه را از منطقه Navigator انتخاب کنید.
- هدف پروژه را از منطقه ویرایشگر انتخاب کنید.
برگه عمومی را از منطقه ویرایشگر انتخاب کنید.
- به چارچوب ها و کتابخانه های پیوندی بروید ، سپس روی دکمه + کلیک کنید تا Frameworks اضافه شود.
در پنجره ای که ظاهر می شود ، به Usernotifications.frameWork بروید ، روی ورودی کلیک کنید ، سپس روی Add کلیک کنید.
این چارچوب فقط در Xcode V8 و بعد از آن ظاهر می شود و توسط این کتابخانه مورد نیاز است.
برگه قابلیت ها را از منطقه ویرایشگر انتخاب کنید.
- اعلان های فشار را به روشن کنید.
- به حالت های پس زمینه بروید ، سپس آن را روشن کنید.
- اعلان های از راه دور را در حالت های پس زمینه انتخاب کنید.
یک شیء برنامه Firebase ایجاد کنید:
app = ::firebase::App::Create(::firebase::AppOptions());
کلاس را تعریف کنید که
firebase::messaging::Listener
را پیاده سازی می کند.پیام رسانی ابری Firebase ، عبور در برنامه و یک شنونده ساخته شده را آغاز کنید:
::firebase::messaging::Initialize(app, listener);
به نشانه ثبت نام دستگاه دسترسی پیدا کنید
پس از اولیه سازی کتابخانه پیام رسانی ابری Firebase ، یک نشانه ثبت نام برای نمونه برنامه مشتری درخواست می شود. این برنامه با پاسخ به تماس تلفنی 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
، اما در بعضی موارد ممکن است بخواهید رفتار پیش فرض را نادیده بگیرید. برای انجام این کار در Android ، باید کلاسهای سفارشی بنویسید که com.google.firebase.messaging.cpp.ListenerService
را گسترش می دهد و همچنین AndroidManifest.xml
پروژه خود را به روز کنید.
روشهای ListenerService
را نادیده بگیرید
ListenerService
کلاس جاوا است که پیام های ورودی ارسال شده به برنامه را رهگیری می کند و آنها را به کتابخانه C ++ هدایت می کند. هنگامی که برنامه در پیش زمینه قرار دارد (یا هنگامی که برنامه پس زمینه است و یک بار فقط داده را دریافت می کند) ، پیام ها از طریق یکی از تماس های ارائه شده در این کلاس عبور می کنند. برای افزودن رفتارهای سفارشی به انتقال پیام ، شما باید ListenerService
پیش فرض FCM را گسترش دهید:
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
وجود دارد که ListenerService
پیش فرض FCM را اعلام می کند. این مانیفست به طور معمول با مانیفست خاص پروژه ادغام می شود ، این است که چگونه ListenerService
قادر به اجرای آن هستند. این ListenerService
باید با سرویس شنونده سفارشی جایگزین شوند. این کار با از بین بردن پیش فرض 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) از تولید در زمان پیکربندی جلوگیری کنید. برای انجام این کار ، یک مقدار ابرداده را به Info.plist
خود اضافه کنید. پپ (نه GoogleService-Info.plist
) در سیستم عامل های اپل یا AndroidManifest.xml
خود را در Android:
اندروید
<?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>
سویفت
FirebaseMessagingAutoInitEnabled = NO
برای ورود مجدد FCM ، می توانید یک تماس با زمان اجرا کنید:
::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);
این مقدار در سراسر برنامه مجدداً تنظیم می شود.
پیام هایی با پیوندهای عمیق در Android
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>
هنگامی که کاربران روی یک اعلان حاوی پیوندی به طرح و میزبان مشخص شده ضربه می زنند ، برنامه شما فعالیت را با این فیلتر قصد برای رسیدگی به لینک شروع می کند.
مراحل بعدی
پس از تنظیم برنامه مشتری ، می توانید شروع به دریافت پیام یا ارسال آنها به کاربران خود کنید: