10

वर्तमान में, मैं उस एप्लिकेशन पर काम कर रहा हूं जहां उपयोगकर्ता Google के साथ लॉगिन करने में सक्षम है। लॉगिन प्रक्रिया के हिस्से के रूप में, हमें सर्वर एक्सेस के लिए Google एक्सेस टोकन और रिफ्रेश टोकन भेजने की आवश्यकता है।एंड्रॉइड: Google साइन-इन एपीआई द्वारा रीफ्रेश टोकन कैसे प्राप्त करें?

मैं निम्न विधि द्वारा पहुँच टोकन को पुन: प्राप्त कर रहा हूँ,

 mAccountName = googleSignInAccount.getEmail(); 
     String scopes = "oauth2:profile email"; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(activity.getApplicationContext(), mAccountName, scopes); 
     } catch (IOException e) { 
      Logger.eLog(TAG, e.getMessage()); 
     } 

GoogleAuthUtil वर्ग जहाँ से मैं पहुँच टोकन तक पहुँचने हूँ ताज़ा टोकन के लिए एक समारोह नहीं है। तो रीफ्रेश टोकन का उपयोग कैसे करें? अग्रिम में धन्यवाद!

उत्तर

2

मुझे लगता है कि आपको नीचे दिए गए AsyncTask में इस कोड को आजमाने की आवश्यकता है।

private class RetrieveTokenTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     String accountName = params[0]; 
     String scopes = "oauth2:profile email"; 
     String token = null; 
     try { 
      token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes); 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
     } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED); 
    //REQ_SIGN_IN_REQUIRED = 55664; 
     } catch (GoogleAuthException e) { 
      Log.e(TAG, e.getMessage()); 
     } 
     return token; 
    } 

    @Override 
    protected void onPostExecute(String s) { 
     super.onPostExecute(s); 
     Log.i("AccessToken",s); 
    } 
} 

फिर पहुंच टोकन प्राप्त करने AsyncTask नीचे की तरह फोन:

...  
new RetrieveTokenTask().execute(mAccountName); 

चेक here। मुझे आशा है कि यह आपकी मदद करेगा।

+0

धन्यवाद प्रणय! मैं एक ताज़ा टोकन की तलाश में हूं। मुझे पहले से ही इसी प्रकार के कार्यान्वयन के साथ टोकन तक पहुंच मिली है। –

+4

आप [इस मुद्दे] को देख सकते हैं (http://stackoverflow.com/questions/26969622/how-to-get-refreshtoken-when-using-googleauthutil)। यह इंगित करता है कि आपको 'GoogleAuthUtil.getToken()' का उपयोग करके रीफ्रेश टोकन नहीं मिल सकता है, लेकिन टोकन स्वयं को अमान्य में डालकर, यह एक नया (रीफ्रेश टोकन) – adjuremods

8

आप का उपयोग करना चाहिए server auth code flow via Auth.GOOGLE_SIGN_IN_API: एंड्रॉयड ग्राहक पर एक सर्वर प्रमाणन कोड प्राप्त, अपने सर्वर पर भेजने के लिए, सर्वर एक्सचेंजों ताज़ा और पहुँच टोकन के लिए कोड (एक रहस्य के साथ)। इस blog post में भी अधिक जानकारी हैं।

इसके अलावा, यदि आप अब एक्सेस टोकन के लिए GoogleAuthUtil.getToken का उपयोग कर रहे हैं, तो आप सुरक्षा और सर्वोत्तम यूएक्स सुनिश्चित करने के लिए अनुशंसित प्रवाह में माइग्रेट करने के तरीके को देखने के लिए यह Google Sign-In best practice blog post देखें।

+0

वापस कर देगा, जब आप इस विधि का उपयोग करते हैं, तो आप मुझे रोक सकते हैं मैं accaunt चुनने के लिए उपयोगकर्ता पॉप-अप प्रदान नहीं कर सकता ... जब उपयोगकर्ता लॉग इन करने के लिए क्लिक करता है, तो वर्तमान डिवाइस accautn के साथ लॉग इन होता है ... उपयोगकर्ता किसी भी विचार को बदल नहीं सकता ... मैं उपयोगकर्ता पॉप- खातों के साथ? –

+0

@AlekseyTimoshchenko यदि आप: ए) इस डिवाइस पर एक बार एक खाता साइन इन किया है, तो साइन-इन लाइब्रेरी आपके लिए खाता याद रखेगी और भविष्य में साइन-इन में उस खाते का स्वतः उपयोग करेगा b) डिवाइस पर एकाधिक खाते हैं और केवल एक उन्हें सभी स्कोपों ​​के लिए अधिकृत किया गया है, क्रॉस-डिवाइस-सिंगल-साइन-ऑन प्रभावी होगा और ऑटो खाता है कि एक खाता .. यदि आप अभी उस स्थिति में हैं, तो आप एक्सेस-> कनेक्ट किए गए ऐप्स पर पहुंच रद्द करने के लिए जा सकते हैं और फिर आप खाता चयनकर्ता फिर से देख सकते हैं। –

+0

हाय @ इसाबेला चेन, क्या आपको लगता है कि 'GoogleAuthUtil.getToken' का उपयोग [इस प्रश्न] के लिए किया जा सकता है (http://stackoverflow.com/questions/40838154/retrieve-google-access-token-after- प्रमाणीकृत-using-firebase -authentication)? – BNK

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