5

ठीक है, Google Play Services के GoogleApiClient का उपयोग करके मैंने उपयोगकर्ता को खाता (यदि एकाधिक) चुनने दिया है और मेरे एंड्रॉइड ऐप के लिए ओथ अनुमतियों की पुष्टि की है। मुझे नेता बोर्डों और कुछ अन्य चीजों के लिए इसकी आवश्यकता है।क्लाउड एंडपॉइंट क्लाइंट के लिए प्रमाण-पत्र प्रदान करने के लिए GoogleApiClient का उपयोग कैसे करें

लेकिन मैं ऐपइंजिन बैकएंड का भी उपयोग कर रहा हूं और इसके साथ उपयोगकर्ता को प्रमाणीकृत करने की आवश्यकता है। ऐसा करने के लिए मुझे ईमेल खाते में पास करने की आवश्यकता है जिसके साथ प्रमाणीकरण करना है।

Google Play सेवाओं को एकीकृत करने से पहले मैंने खाता चयन मैन्युअल रूप से संभाला था, इसलिए मुझे हमेशा उपयोगकर्ता द्वारा चुने गए ईमेल खाते तक पहुंच थी। लेकिन GoogleApiClient हथियारों की लंबाई पर हैडल करता है।

private void signInToGoogleAccount() { 
    googleApiClient = new GoogleApiClient.Builder(this) 
     .addConnectionCallbacks(this) 
     .addOnConnectionFailedListener(this) 
     .addApi(Plus.API) 
     .addScope(Plus.SCOPE_PLUS_LOGIN) // Profile + Circles + ?writing app activities? 
     .build(); 
    googleApiClient.connect(); 
} 

// GPS Connection Callbacks. 

@Override 
public void onConnected(Bundle bundle) { 
    Log.i(TAG, "#onConnected - GoogleApiClient connected!!"); 
    if (Plus.PeopleApi.getCurrentPerson(googleApiClient) != null) { 
     final Person currentPerson = Plus.PeopleApi.getCurrentPerson(googleApiClient); 
     String personName = currentPerson.getDisplayName(); 
     Log.i(TAG, "name=" + personName); 
     String personGooglePlusProfile = currentPerson.getUrl(); 
     Log.i(TAG, "profileUrl=" + personGooglePlusProfile); 
    } 
} 

@Override 
public void onConnectionSuspended(int cause) { 
    Log.d(TAG, "#onConnectionSuspended - GoogleApiClient connection suspend. cause=" + cause); 
    googleApiClient.connect(); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == RC_SIGN_IN) { 
     Log.i(TAG, "#onActivityResult RC_SIGN_IN resultCode=" + resultCode + " data=" + data); 
     intentInProgress = false; 
     if (resultCode == RESULT_OK) { 
      if (!googleApiClient.isConnecting()) { 
       googleApiClient.connect(); 
      } 
     } else if (resultCode == RESULT_CANCELED) { 
      Log.i(TAG, "#onActivityResult RC_SIGN_IN user cancelled"); 
     } else { 
      Log.w(TAG, "#onActivityResult RC_SIGN_IN something weird"); 
     } 
    } 
} 

private void doRemoteTask() { 
    final GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(context, AppConstants.AUDIENCE); 

    // This is the info that I need to recover from the GooglePlayServices signin. 
    credential.setSelectAccountName(userAccountName); 

    final MyRemoteTask myRemoteTask = new MyRemoteTask.Builder(
     AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential 
    ).build(); 
    myRemoteTask.doThing(someArg); 
} 

तो क्या मैं पता करने की जरूरत है:

  1. मैं उपयोगकर्ता द्वारा चयनित ईमेल खाते के विवरण कैसे प्राप्त करूं जब मैं GoogleApiClient का उपयोग अधिकृत करने के लिए।
  2. या क्या ऐपइंजिन क्लाउड एंडपॉइंट क्लाइंट में उपयोगकर्ता पहचान इंजेक्ट करने का एक और अधिक GoogleApiClient अनुकूल तरीका है।

उत्तर

3

आश्चर्यजनक है कि दूसरों के लिए प्रश्न कैसे लिखना विचार प्रक्रियाओं को अनवरोधित करने में मदद कर सकता है।

समाधान का उपयोग Plus.AccountApi.getAccountName(googleApiClient); जैसे

@Override 
public void onConnected(Bundle bundle) { 
    final String accountName = Plus.AccountApi.getAccountName(googleApiClient); 
    Log.i(TAG, "#onConnected - GoogleApiClient accountName=" + accountName); 
} 
+2

साझा करने के लिए धन्यवाद है। मुझे कुछ समय बचाया। समाधान निश्चित रूप से पहले स्पष्ट नहीं है। – sthomps

+2

'AccountApi' बहिष्कृत है! कृपया अपना कोड अपडेट करें। – GFPF

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

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