मैं क्लाइंट (एंड्रॉइड ऐप) से विषय सदस्यता प्रबंधित करना चाहता हूं। मैं वर्तमान में क्रिएट() पर गतिविधि में कर रहा हूं। मैं सोच रहा हूं कि अगर InstanceIdService :: onTokenRefresh() पर किसी भी समय सुविधाजनक (बटन क्लिक आदि पर) सदस्यता लेने/सदस्यता समाप्त करने का सही तरीका है।क्या मुझे एफसीएम विषयों की सदस्यता लेने के लिए FirebaseInstanceIdService का विस्तार करने की आवश्यकता है?
संक्षेप में, यदि मैं क्लाइंट साइड (कोई सर्वर नहीं) पर विषय सदस्यता प्रबंधित करता हूं, तो क्या मुझे अभी भी InstanceIdService से परेशान होना है?
दस्तावेज के विभिन्न स्रोत फायरबेस क्लाउड मैसेजिंग (एफसीएम) विषय सदस्यता पर अलग-अलग लेते हैं। कुछ InstanceIdService का उल्लेख करते हैं, कुछ नहीं। यहाँ वे हैं:
पर गाइड यह InstanceIdService का उल्लेख नहीं है जब विषय सदस्यता के बारे में बात।
एक बार जब आप सेटअप कार्य पूरा कर लेंगे, तो आप पर क्लाइंट कोड जोड़ सकते हैं और फिर विषय पर भेजे गए संदेशों को संभाल सकते हैं।
क्लाइंट ऐप्स किसी भी मौजूदा विषय की सदस्यता ले सकते हैं, या वे नया विषय बना सकते हैं। जब कोई ग्राहक ऐप किसी नए विषय के नाम की सदस्यता लेता है (एक आपके फ़ायरबेस परियोजना के लिए पहले से मौजूद नहीं है), तो नाम का एक नया विषय एफसीएम में बनाया गया है और कोई भी ग्राहक बाद में पर सब्सक्राइब कर सकता है।
एक विषय की सदस्यता के लिए, ग्राहक एप्लिकेशन FCM विषय नाम के साथ Firebase क्लाउड संदेश subscribeToTopic() कहता है:
FirebaseMessaging.getInstance().subscribeToTopic("news");
कक्षा MyFirebaseInstanceIdService एक सेवा होगी जो एफसीएम तर्क को संभालने के लिए उपयोग की जाने वाली सेवा होगी। इस सेवा का उपयोग एप्लिकेशन को सतर्क करने के लिए किया जाता है जब एक नया इंस्टेंस आईडी टोकन उत्पन्न होता है, और जेनरेट किए गए टोकन को पुनर्प्राप्त करने के लिए उपयोग किया जाता है।
फ़ायरबेस इंस्टेंस आईडी सेवा का विस्तार करने के लिए इसे संशोधित करें और किसी विषय की सदस्यता लेने के लिए पर टोकन रिफ्रेश विधि को ओवरराइड करें। इस तरह देखो करने के लिए MyFirebaseInstanceIdService में onTokenRefresh विधि को अपडेट करने के लिए निम्न कोड का उपयोग करें:
public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
private static final String TAG = "MyFirebaseIIDService";
private static final String FRIENDLY_ENGAGE_TOPIC = "friendly_engage";
/**
* The Application's current Instance ID token is no longer valid
* and thus a new one must be requested.
*/
@Override
public void onTokenRefresh() {
// If you need to handle the generation of a token, initially or
// after a refresh this is where you should do that.
String token = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "FCM Token: " + token);
// Once a token is generated, we subscribe to topic.
FirebaseMessaging.getInstance()
.subscribeToTopic(FRIENDLY_ENGAGE_TOPIC);
}
}
यह InstanceIdService का उपयोग करता है, लेकिन विषय सदस्यता वहां नहीं होता है।यह एक गतिविधि में बटन क्लिक के हिस्से के रूप में ग्राहक बस किया जाता है:
Button subscribeButton = (Button) findViewById(R.id.subscribeButton);
subscribeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// [START subscribe_topics]
FirebaseMessaging.getInstance().subscribeToTopic("news");
// [END subscribe_topics]
// Log and toast
String msg = getString(R.string.msg_subscribed);
Log.d(TAG, msg);
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
});
प्रबंधक सदस्यता के लिए InstanceIdService कोड पर टिप्पणी से पता चलता है onTokenRefresh()
@Override
public void onTokenRefresh() {
// Get updated InstanceID token.
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d(TAG, "Refreshed token: " + refreshedToken);
// If you want to send messages to this application instance or
// manage this apps subscriptions on the server side, send the
// Instance ID token to your app server.
sendRegistrationToServer(refreshedToken);
}
दिलचस्प। वास्तव में पहले यह ध्यान नहीं दिया है। मैं चारों तरफ देखूंगा और जवाब दूंगा। –