استنادًا إلى نموذج النشر/الاشتراك، تتيح لك رسائل المواضيع في FCM إرسال رسالة
إلى أجهزة متعدّدة تم تفعيل موضوع معيّن فيها. يمكنك إنشاء رسائل المواضيع كما هو مطلوب، ويتولى FCM توجيه الرسائل وتسليمها بشكل موثوق إلى الأجهزة المناسبة.
على سبيل المثال، يمكن لمستخدمي تطبيق توقّعات المدّ والجزر المحلي تفعيل موضوع "تنبيهات تيارات المدّ والجزر" وتلقّي إشعارات بشأن الظروف المثلى لصيد الأسماك في المياه المالحة في مناطق محدّدة. ويمكن لمستخدمي تطبيق رياضي
الاشتراك في التحديثات التلقائية لنتائج المباريات المباشرة لفِرقهم
المفضّلة.
في ما يلي بعض النقاط التي يجب أخذها في الاعتبار بشأن المواضيع:
تكون ميزة "الرسائل حول الموضوع" مناسبة بشكلٍ أفضل للمحتوى المتعلّق بالطقس أو أي معلومات أخرى متاحة للجميع.
تم تحسين رسائل المواضيع لمعالجة البيانات بدلاً من وقت الاستجابة. لضمان التسليم السريع والآمن
لأجهزة فردية أو مجموعات صغيرة من الأجهزة،
يمكنك توجيه الرسائل إلى رموز التسجيل المميّزة
وليس المواضيع.
إذا كنت تريد إرسال الرسائل إلى أجهزة متعدّدة لكل مستخدم، ننصحك باستخدام ميزة
المراسلة ضمن مجموعة أجهزة
بالنسبة إلى حالات الاستخدام هذه.
تتيح ميزة "رسائل المواضيع" اشتراكات غير محدودة لكل موضوع. ومع ذلك، تفرض FCM
حدودًا في هذه المجالات:
لا يمكن اشتراك نسخة واحدة من التطبيق في أكثر من 2000 موضوع.
إذا كنت تستخدم
الاستيراد المجمّع
لاشتراك نُسخ التطبيق، يقتصر كل طلب على 1000 نسخة من التطبيق.
يتم تحديد معدّل تكرار الاشتراكات الجديدة لكل مشروع. إذا أرسلت عددًا كبيرًا جدًا من
طلبات الاشتراك في فترة زمنية قصيرة، ستستجيب خوادم FCM باستخدام ردّ
429 RESOURCE_EXHAUSTED ("تم تجاوز الحصة"). أعِد المحاولة باستخدام خوارزمية الرقود الأسي الثنائي.
إذا تعذّر طلب الاشتراك في البداية، يُعيد FCM المحاولة إلى أن يتمكّن من الاشتراك في الموضوع بنجاح. في كل مرة يتم فيها تشغيل التطبيق،
يتأكد FCM من أن جميع المواضيع المطلوبة قد تم الاشتراك فيها.
تتيح لك Firebase Admin SDK
تنفيذ مهام
إدارة المواضيع الأساسية من جهة الخادم. وبسبب الرموز المميّزة للتسجيل، يمكنك الاشتراك في مثيلات تطبيق العميل وإلغاء الاشتراك فيها بشكل مجمَّع باستخدام منطق الخادم.
يمكنك اشتراك نُسخ تطبيق العميل في أي موضوع حالي، أو
يمكنك إنشاء موضوع جديد. عند استخدام واجهة برمجة التطبيقات لإشتراك تطبيق العميل
في موضوع جديد (موضوع غير متوفّر حاليًا لمشروعك على Firebase)،
يتم إنشاء موضوع جديد بهذا الاسم في خدمة "مراسلة Firebase" ويمكن لأي عميل إشتراكه بعد ذلك.
يمكنك تمرير قائمة بالرموز المميّزة للتسجيل إلى طريقة الاشتراك في Firebase Admin SDK
لاشتراك الأجهزة المقابلة في موضوع معيّن:
Node.js
// These registration tokens come from the client FCM SDKs.constregistrationTokens=['YOUR_REGISTRATION_TOKEN_1',// ...'YOUR_REGISTRATION_TOKEN_n'];// Subscribe the devices corresponding to the registration tokens to the// topic.getMessaging().subscribeToTopic(registrationTokens,topic).then((response)=>{// See the MessagingTopicManagementResponse reference documentation// for the contents of response.console.log('Successfully subscribed to topic:',response);}).catch((error)=>{console.log('Error subscribing to topic:',error);});
جافا
// These registration tokens come from the client FCM SDKs.List<String>registrationTokens=Arrays.asList("YOUR_REGISTRATION_TOKEN_1",// ..."YOUR_REGISTRATION_TOKEN_n");// Subscribe the devices corresponding to the registration tokens to the// topic.TopicManagementResponseresponse=FirebaseMessaging.getInstance().subscribeToTopic(registrationTokens,topic);// See the TopicManagementResponse reference documentation// for the contents of response.System.out.println(response.getSuccessCount()+" tokens were subscribed successfully");
Python
# These registration tokens come from the client FCM SDKs.registration_tokens=['YOUR_REGISTRATION_TOKEN_1',# ...'YOUR_REGISTRATION_TOKEN_n',]# Subscribe the devices corresponding to the registration tokens to the# topic.response=messaging.subscribe_to_topic(registration_tokens,topic)# See the TopicManagementResponse reference documentation# for the contents of response.print(response.success_count,'tokens were subscribed successfully')
انتقال
// These registration tokens come from the client FCM SDKs.registrationTokens:=[]string{"YOUR_REGISTRATION_TOKEN_1",// ..."YOUR_REGISTRATION_TOKEN_n",}// Subscribe the devices corresponding to the registration tokens to the// topic.response,err:=client.SubscribeToTopic(ctx,registrationTokens,topic)iferr!=nil{log.Fatalln(err)}// See the TopicManagementResponse reference documentation// for the contents of response.fmt.Println(response.SuccessCount,"tokens were subscribed successfully")
#C
// These registration tokens come from the client FCM SDKs.varregistrationTokens=newList<string>(){"YOUR_REGISTRATION_TOKEN_1",// ..."YOUR_REGISTRATION_TOKEN_n",};// Subscribe the devices corresponding to the registration tokens to the// topicvarresponse=awaitFirebaseMessaging.DefaultInstance.SubscribeToTopicAsync(registrationTokens,topic);// See the TopicManagementResponse reference documentation// for the contents of response.Console.WriteLine($"{response.SuccessCount} tokens were subscribed successfully");
تسمح لك واجهة برمجة تطبيقات المشرف FCM أيضًا بإلغاء اشتراك الأجهزة من موضوع من خلال تمرير رموز التسجيل المميّزة إلى الطريقة المناسبة:
Node.js
// These registration tokens come from the client FCM SDKs.constregistrationTokens=['YOUR_REGISTRATION_TOKEN_1',// ...'YOUR_REGISTRATION_TOKEN_n'];// Unsubscribe the devices corresponding to the registration tokens from// the topic.getMessaging().unsubscribeFromTopic(registrationTokens,topic).then((response)=>{// See the MessagingTopicManagementResponse reference documentation// for the contents of response.console.log('Successfully unsubscribed from topic:',response);}).catch((error)=>{console.log('Error unsubscribing from topic:',error);});
جافا
// These registration tokens come from the client FCM SDKs.List<String>registrationTokens=Arrays.asList("YOUR_REGISTRATION_TOKEN_1",// ..."YOUR_REGISTRATION_TOKEN_n");// Unsubscribe the devices corresponding to the registration tokens from// the topic.TopicManagementResponseresponse=FirebaseMessaging.getInstance().unsubscribeFromTopic(registrationTokens,topic);// See the TopicManagementResponse reference documentation// for the contents of response.System.out.println(response.getSuccessCount()+" tokens were unsubscribed successfully");
Python
# These registration tokens come from the client FCM SDKs.registration_tokens=['YOUR_REGISTRATION_TOKEN_1',# ...'YOUR_REGISTRATION_TOKEN_n',]# Unubscribe the devices corresponding to the registration tokens from the# topic.response=messaging.unsubscribe_from_topic(registration_tokens,topic)# See the TopicManagementResponse reference documentation# for the contents of response.print(response.success_count,'tokens were unsubscribed successfully')
انتقال
// These registration tokens come from the client FCM SDKs.registrationTokens:=[]string{"YOUR_REGISTRATION_TOKEN_1",// ..."YOUR_REGISTRATION_TOKEN_n",}// Unsubscribe the devices corresponding to the registration tokens from// the topic.response,err:=client.UnsubscribeFromTopic(ctx,registrationTokens,topic)iferr!=nil{log.Fatalln(err)}// See the TopicManagementResponse reference documentation// for the contents of response.fmt.Println(response.SuccessCount,"tokens were unsubscribed successfully")
#C
// These registration tokens come from the client FCM SDKs.varregistrationTokens=newList<string>(){"YOUR_REGISTRATION_TOKEN_1",// ..."YOUR_REGISTRATION_TOKEN_n",};// Unsubscribe the devices corresponding to the registration tokens from the// topicvarresponse=awaitFirebaseMessaging.DefaultInstance.UnsubscribeFromTopicAsync(registrationTokens,topic);// See the TopicManagementResponse reference documentation// for the contents of response.Console.WriteLine($"{response.SuccessCount} tokens were unsubscribed successfully");