2012-11-09 12 views
7

से शुरू होता है मैंने जीसीएम के बारे में लेख पढ़े हैं, बिना किसी नियमित चक्र के पंजीकरण आईडी को रीफ्रेश कर सकते हैं। मैं पुश अधिसूचना का उपयोग करके एक ऐप बनाने की कोशिश कर रहा हूं लेकिन इस तरह के ताज़ा पंजीकरण आईडी को संभालने का तरीका सुनिश्चित नहीं है।Google क्लाउड मैसेजिंग (जीसीएम) पंजीकरण आईडी का अनुरोध हर बार आवेदन

मेरी पहली रणनीति ऐप शुरू होने पर हर बार पंजीकरण आईडी का अनुरोध कर रही है और इसे ऐप सर्वर पर भेजती है। यह काम करता है लेकिन किसी भी तरह गलत लगता है ...

क्या ऐसा करना ठीक है?

+0

[हैंडलिंग Android पर Google क्लाउड संदेश सेवा में पंजीकरण आईडी परिवर्तन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on -एंड्रॉयड) – Eran

उत्तर

5

मूल रूप से, आप अपने मुख्य गतिविधि में निम्न करना चाहिए:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

    GCMRegistrar.checkDevice(this); 
    GCMRegistrar.checkManifest(this); 

    final String regId = GCMRegistrar.getRegistrationId(this); 

    if (regId.equals("")) { 
     GCMRegistrar.register(this, GCMIntentService.GCM_SENDER_ID); 
    } else { 
     Log.v(TAG, "Already registered"); 
    } 
} 

बाद में आप जब भी एप्लिकेशन एक com.google.android.c2dm.intent.REGISTRATION एक registration_id अतिरिक्त के साथ आशय प्राप्त करता है अपने अनुप्रयोग सर्वर, लिए पंजीकरण आईडी भेजना चाहिए। यह तब हो सकता है जब Google समय-समय पर ऐप की आईडी अपडेट करता है।

आप उदाहरण के लिए: अपनी खुद की कार्यान्वयन के साथ com.google.android.gcm.GCMBaseIntentService बढ़ा कर इस लक्ष्य को हासिल कर सकते हैं, .:

public class GCMIntentService extends GCMBaseIntentService { 

    // Also known as the "project id". 
    public static final String GCM_SENDER_ID = "XXXXXXXXXXXXX"; 

    private static final String TAG = "GCMIntentService"; 

    public GCMIntentService() { 
     super(GCM_SENDER_ID); 
    } 

    @Override 
    protected void onRegistered(Context context, String regId) { 
     // Send the regId to your server. 
    } 

    @Override 
    protected void onUnregistered(Context context, String regId) { 
     // Unregister the regId at your server. 
    } 

    @Override 
    protected void onMessage(Context context, Intent msg) { 
     // Handle the message. 
    } 

    @Override 
    protected void onError(Context context, String errorId) { 
     // Handle the error. 
    } 
} 

अधिक जानकारी के लिए, मैं (री) हैं writing the client side code और the Advanced Section of the GCM documentation के लिए दस्तावेज़ पढ़ें।

आशा है कि मदद करता है!

1

पंजीकरण रीफ्रेश नई जीसीएम लाइब्रेरी में शामिल नहीं है।

Costin Manolache

'समय-समय पर' ताज़ा के शब्द कभी नहीं हुआ, और पंजीकरण ताज़ा नया GCM लाइब्रेरी में शामिल नहीं है।

पंजीकरण आईडी परिवर्तन के लिए एकमात्र ज्ञात कारण ऐप्स की पुरानी बग है, अगर अपग्रेड हो रहा है, तो उन्हें संदेश प्राप्त होने पर स्वचालित रूप से अनियंत्रित हो रहा है। जब तक यह बग ठीक नहीं होता है तब तक ऐप्स को अपग्रेड के बाद रजिस्टर() को कॉल करने की आवश्यकता होती है, और अब तक पंजीकरण आईडी में बदल सकती है। अनधिकृत कॉलिंग() स्पष्ट रूप से आमतौर पर पंजीकरण आईडी भी बदलती है।

सुझाव/वर्कअराउंड उदाहरण के लिए साझा प्राथमिकता के रूप में सहेजे गए अपने स्वयं के यादृच्छिक पहचानकर्ता उत्पन्न करना है। प्रत्येक ऐप अपग्रेड पर आप पहचानकर्ता और संभावित रूप से नई पंजीकरण आईडी अपलोड कर सकते हैं। यह सर्वर पक्ष पर अपग्रेड और पंजीकरण परिवर्तनों को ट्रैक और डिबग करने में भी मदद कर सकता है।

संबंधित मुद्दे