ठीक है। तो मैं कुछ परीक्षण करने में कामयाब रहे और निम्नलिखित निष्कर्ष निकाला है:
deleteToken()
getToken(String, String)
के समकक्ष है, लेकिन getToken()
के लिए नहीं है।
यह केवल तभी काम करता है जब आप प्रेषक आईडी पास कर रहे हैं तो एक अलग प्रेषक आईडी है (वही आईडी नहीं जो आपके google-services.json में देखी जा सकती है)। उदाहरण के लिए, आप अपने ऐप को भेजने के लिए एक अलग सर्वर को भेजने की अनुमति देना चाहते हैं, तो आप अपने एप को भेजने के लिए प्रमाणीकरण देने के लिए getToken("THEIR_SENDER_ID", "FCM")
पर कॉल करें। यह एक अलग पंजीकरण टोकन वापस करेगा जो केवल उस विशिष्ट प्रेषक से मेल खाता है।
भविष्य में, अगर आप अपने ऐप में भेजने के लिए उनके प्राधिकरण दूर करने के लिए चुना है, तो आप deleteToken("THEIR_SENDER_ID", "FCM")
का उपयोग करना होगा। यह संबंधित टोकन को अमान्य कर देगा, और जब प्रेषक एक संदेश भेजने का प्रयास करता है, इच्छित व्यवहार के रूप में, उन्हें NotRegistered
त्रुटि प्राप्त होगी।
- अपने स्वयं के प्रेषक के लिए टोकन हटाने के लिए, सही हैंडलिंग
deleteInstanceId()
का उपयोग करना है।
विशेष रूप से इस answer by @Prince का उल्लेख करते हुए विशेष रूप से कोड नमूना इस के साथ मेरी मदद करने के लिए।
deleteInstanceId()
पर कॉल करने के बाद @ MichałK पहले से ही अपने पोस्ट में कर रहा है, getToken()
को नए टोकन के लिए अनुरोध भेजने के लिए बुलाया जाना चाहिए। हालांकि, आपको इसे दूसरी बार फोन करने की आवश्यकता नहीं है। onTokenRefresh()
लागू होने तक, इसे स्वचालित रूप से आपको नया टोकन प्रदान करने के लिए ट्रिगर करना चाहिए।
संक्षिप्त के लिए, deleteInstanceId()
>getToken()
>onTokenRefresh()
देखें।
नोट: deleteInstanceId()
पर कॉल करने से न केवल आपके स्वयं के ऐप के लिए टोकन हटा दिया जाएगा। यह ऐप इंस्टेंस से जुड़े सभी विषय सदस्यता और अन्य सभी टोकन को हटा देगा।
आप सकारात्मक आप deleteToken()
ठीक से कॉल कर रहे हैं? दर्शकों के लिए मूल्य होना चाहिए (आपके द्वारा लिंक किए गए मेरे उत्तर से भी देखा गया है) "ऐप सर्वर की प्रेषक आईडी पर सेट है"। आप getId()
मान पास कर रहे हैं जो प्रेषक आईडी के समान नहीं है (इसमें ऐप इंस्टेंस आईडी मान शामिल है)। साथ ही, आप संदेश कैसे भेज रहे हैं (ऐप सर्वर या अधिसूचना कंसोल)?
getToken()
और getToken(String, String)
विभिन्न टोकन लौटाता है। मेरा उत्तर here देखें।
मैं भी FirebaseInstanceId.getInstance().deleteInstanceId()
की कोशिश की है, लेकिन फिर अगली बार मैं FirebaseInstanceId.getInstance.getToken
फोन मैं अशक्त (यह दूसरी कोशिश में काम करता है) प्राप्त करते हैं।
यह शायद इसलिए है क्योंकि पहली बार जब आप getToken()
कॉल कर रहे हैं, यह अभी भी उत्पन्न किया जा रहा है है। यह सिर्फ इरादा व्यवहार है।
मुझे लगता है, deleteInstanceId
के बाद मैं तुरंत फिर से getToken()
कह सकते हैं, लेकिन यह एक हैक की तरह दिखता है।
वास्तव में नहीं। इस प्रकार आपको नया जेनरेट किया जाएगा (बशर्ते कि यह पहले से ही जेनरेट किया गया हो) टोकन। तो मुझे लगता है कि यह ठीक है।
यह एकमात्र "प्रेषक आईडी" है जिसने मुझे गेटोकन या हटाए जाने के लिए एक त्रुटि नहीं फेंक दी। जब मैंने अपने फायरबेस कंसोल से टेक्स्ट प्रोजेक्ट आईडी का उपयोग किया तो दोनों विधियों ने फेंक दिया। तब मैंने संख्यात्मक आईडी का उपयोग किया जो मुझे googleservices.json में मिला और ऐसा लगता है कि यह काम करता है। फिर getId() पारित किया और यह या तो फेंक नहीं दिया। तो मैंने सोचा कि यह है। –
हैक के लिए, मुझे इसे हटाने के तुरंत बाद इसे कॉल करना होगा, इसलिए यह पहली बार शून्य हो जाता है, और उसके बाद इसे काम करने के लिए लॉगिन के दौरान कॉल करें। यही कारण है कि मुझे लगता है कि यह एक हैक है। –
मैं कोशिश करता हूं और देखता हूं कि मैं बाद में कुछ परीक्षण कर सकता हूं और व्यवहार को दोहरा सकता हूं। यदि मेरे पास समय है तो यहां वापस आ जाएगा। चीयर्स! –