اشتراک های موضوع را مدیریت کنید

شما می‌توانید یک برنامه‌ی کلاینت را در یک تاپیک از سرور یا کلاینت مشترک کنید:

  • روی سرور، با استفاده از Firebase Admin SDK .

  • روی کلاینت، با استفاده از API سمت کلاینت درون برنامه شما.

مدیریت اشتراک‌های موضوعی با استفاده از Admin SDK

کیت توسعه نرم‌افزاری مدیریت Firebase Admin SDK به شما امکان می‌دهد وظایف مدیریت موضوع (topic management tasks) را از سمت سرور انجام دهید. با توجه به توکن(های) ثبت نام آنها، می‌توانید نمونه‌های برنامه کلاینت را به صورت عمده با استفاده از منطق سرور مشترک (subscribe) و لغو اشتراک (unsubscribe) کنید.

شما می‌توانید نمونه‌های برنامه کلاینت را در هر موضوع موجود مشترک کنید، یا می‌توانید یک موضوع جدید ایجاد کنید. وقتی از API برای مشترک کردن یک برنامه کلاینت در یک موضوع جدید (موضوعی که از قبل برای پروژه Firebase شما وجود ندارد) استفاده می‌کنید، یک موضوع جدید با آن نام در FCM ایجاد می‌شود و هر کلاینتی می‌تواند متعاقباً در آن مشترک شود.

می‌توانید فهرستی از توکن‌های ثبت‌نام را به متد اشتراک Firebase Admin SDK ارسال کنید تا دستگاه‌های مربوطه در یک تاپیک ثبت‌نام شوند:

نود جی اس

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  '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.
TopicManagementResponse response = FirebaseMessaging.getInstance().subscribeToTopic(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were subscribed successfully");

پایتون

# 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)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were subscribed successfully")

سی شارپ

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Subscribe the devices corresponding to the registration tokens to the
// topic
var response = await FirebaseMessaging.DefaultInstance.SubscribeToTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were subscribed successfully");

Firebase Admin SDK همچنین به شما امکان می‌دهد با ارسال توکن‌های ثبت‌نام به متد مناسب، اشتراک دستگاه‌ها را از یک تاپیک لغو کنید:

نود جی اس

// These registration tokens come from the client FCM SDKs.
const registrationTokens = [
  '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.
TopicManagementResponse response = FirebaseMessaging.getInstance().unsubscribeFromTopic(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were unsubscribed successfully");

پایتون

# 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)
if err != nil {
	log.Fatalln(err)
}
// See the TopicManagementResponse reference documentation
// for the contents of response.
fmt.Println(response.SuccessCount, "tokens were unsubscribed successfully")

سی شارپ

// These registration tokens come from the client FCM SDKs.
var registrationTokens = new List<string>()
{
    "YOUR_REGISTRATION_TOKEN_1",
    // ...
    "YOUR_REGISTRATION_TOKEN_n",
};

// Unsubscribe the devices corresponding to the registration tokens from the
// topic
var response = await FirebaseMessaging.DefaultInstance.UnsubscribeFromTopicAsync(
    registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
Console.WriteLine($"{response.SuccessCount} tokens were unsubscribed successfully");

متدهای subscribeToTopic() و unsubscribeFromTopic() منجر به ایجاد یک شیء حاوی پاسخ از FCM می‌شوند. نوع بازگشتی صرف نظر از تعداد توکن‌های ثبت مشخص شده در درخواست، فرمت یکسانی دارد.

در صورت بروز خطا (عدم موفقیت در احراز هویت، توکن یا موضوع نامعتبر و غیره) این روش‌ها منجر به خطا می‌شوند. برای مشاهده لیست کامل کدهای خطا، شامل توضیحات و مراحل حل آنها، به خطاهای Firebase Admin SDK مراجعه کنید.

اشتراک‌های موضوعی را از برنامه کلاینت خود مدیریت کنید

نمونه‌های برنامه کلاینت همچنین می‌توانند مستقیماً از برنامه شما از طریق SDK های Firebase در موضوعات مشترک شوند یا لغو اشتراک شوند. توجه داشته باشید که FCM در صورت عدم موفقیت اولیه، دوباره تلاش می‌کند تا از موفقیت‌آمیز بودن اشتراک اطمینان حاصل کند.

پلتفرم خود را انتخاب کنید:

اندروید

برنامه‌های کلاینت می‌توانند در هر موضوع موجود مشترک شوند، یا می‌توانند یک موضوع جدید ایجاد کنند. وقتی یک برنامه کلاینت در یک موضوع جدید (موضوعی که از قبل برای پروژه Firebase شما وجود ندارد) مشترک می‌شود، یک موضوع جدید با آن نام در FCM ایجاد می‌شود و هر کلاینتی می‌تواند متعاقباً در آن مشترک شود.

برای اشتراک در یک موضوع، برنامه کلاینت، subscribeToTopic() نوع Firebase Cloud Messaging را با نام موضوع FCM فراخوانی می‌کند. این متد یک Task برمی‌گرداند که می‌تواند توسط یک شنونده تکمیل‌کننده برای تعیین موفقیت‌آمیز بودن اشتراک استفاده شود:

Kotlin

Firebase.messaging.subscribeToTopic("weather")
    .addOnCompleteListener { task ->
        var msg = "Subscribed"
        if (!task.isSuccessful) {
            msg = "Subscribe failed"
        }
        Log.d(TAG, msg)
        Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
    }

Java

FirebaseMessaging.getInstance().subscribeToTopic("weather")
        .addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                String msg = "Subscribed";
                if (!task.isSuccessful()) {
                    msg = "Subscribe failed";
                }
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

برای لغو اشتراک، برنامه‌ی کلاینت، تابع unsubscribeFromTopic() Firebase Cloud Messaging را به همراه نام موضوع فراخوانی می‌کند.

آی‌او‌اس

برنامه‌های کلاینت می‌توانند در هر موضوع موجود مشترک شوند، یا می‌توانند یک موضوع جدید ایجاد کنند. وقتی یک برنامه کلاینت در یک موضوع جدید (موضوعی که از قبل برای پروژه Firebase شما وجود ندارد) مشترک می‌شود، یک موضوع جدید با آن نام در FCM ایجاد می‌شود و هر کلاینتی می‌تواند متعاقباً در آن مشترک شود.

برای عضویت در یک موضوع، متد عضویت را از نخ اصلی برنامه خود فراخوانی کنید ( FCM از نظر نخ ایمن نیست). اگر درخواست عضویت در ابتدا با شکست مواجه شود، FCM به طور خودکار دوباره تلاش می‌کند. در مواردی که عضویت نمی‌تواند تکمیل شود، عضویت خطایی را نشان می‌دهد که می‌توانید آن را در یک کنترل‌کننده تکمیل، همانطور که نشان داده شده است، دریافت کنید:

سویفت

Messaging.messaging().subscribe(toTopic: "weather") { error in
  print("Subscribed to weather topic")
}

هدف-سی

[[FIRMessaging messaging] subscribeToTopic:@"weather"
                                completion:^(NSError * _Nullable error) {
  NSLog(@"Subscribed to weather topic");
}];

این فراخوانی یک درخواست ناهمزمان به بک‌اند FCM ارسال می‌کند و کلاینت را در تاپیک داده شده ثبت نام می‌کند. قبل از فراخوانی subscribeToTopic:topic ، مطمئن شوید که نمونه برنامه کلاینت قبلاً یک توکن ثبت نام از طریق فراخوانی didReceiveRegistrationToken دریافت کرده است.

هر بار که برنامه شروع می‌شود، FCM مطمئن می‌شود که همه موضوعات درخواستی مشترک شده‌اند. برای لغو اشتراک، unsubscribeFromTopic:topic فراخوانی کنید و FCM در پس‌زمینه از موضوع لغو اشتراک می‌کند.

سی++

برای عضویت در یک موضوع، از برنامه خود تابع ::firebase::messaging::Subscribe . این یک درخواست ناهمزمان به بک‌اند FCM ارسال می‌کند و کلاینت را در موضوع داده شده عضویت می‌دهد.

::firebase::messaging::Subscribe("example");

اگر درخواست اشتراک در ابتدا با شکست مواجه شود، FCM دوباره تلاش می‌کند تا بتواند با موفقیت در موضوع مشترک شود. هر بار که برنامه شروع می‌شود، FCM مطمئن می‌شود که همه موضوعات درخواستی مشترک شده‌اند.

برای لغو اشتراک، تابع ::firebase::messaging::Unsubscribe و FCM در پس‌زمینه از موضوع لغو اشتراک می‌کند.

وحدت

برای عضویت در یک موضوع، Firebase.Messaging.FirebaseMessaging.Subscribe را از برنامه خود فراخوانی کنید. این یک درخواست ناهمزمان به بک‌اند FCM ارسال می‌کند و کلاینت را در موضوع داده شده عضویت می‌دهد.

Firebase.Messaging.FirebaseMessaging.Subscribe("/topics/example");

اگر درخواست اشتراک در ابتدا با شکست مواجه شود، FCM دوباره تلاش می‌کند تا بتواند با موفقیت در موضوع مشترک شود. هر بار که برنامه شروع می‌شود، FCM مطمئن می‌شود که همه موضوعات درخواستی مشترک شده‌اند.

برای لغو اشتراک، Firebase.Messaging.FirebaseMessaging.Unsubscribe را فراخوانی کنید، و FCM در پس‌زمینه از موضوع لغو اشتراک می‌کند.

مدیریت تاپیک‌های قدیمی سمت سرور (منسوخ شده)

برای درک اینکه شناسه‌های نمونه (Instance ID) چیستند، به صفحه شناسه نمونه (Instance ID) مراجعه کنید. برای جزئیات بیشتر در مورد نقاط پایانی منسوخ شده، به منابع API شناسه نمونه (Instance ID API References) مراجعه کنید.