2013-05-13 10 views
7

मुझे अपनी प्रोजेक्ट में समस्या है, जहां मैं एंड्रॉइड के साथ Google क्लाउड एंडपॉइंट्स को कनेक्ट करना चाहता हूं। मैं अब भी वही त्रुटि हो रही है:एंड्रॉइड में एंडपॉइंट्स के साथ त्रुटि: GoogleAuthIOException

05-12 21:50:23.995: W/System.err(17739): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException 
05-12 21:50:23.995: W/System.err(17739): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:224) 
05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:888) 
05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:407) 
05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:340) 
05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:458) 
05-12 21:50:24.000: W/System.err(17739): at com.example.endpointstutorial_android.MainActivity$QueryScoresTask.doInBackground(MainActivity.java:74) 
05-12 21:50:24.005: W/System.err(17739): at com.example.endpointstutorial_android.MainActivity$QueryScoresTask.doInBackground(MainActivity.java:1) 
05-12 21:50:24.005: W/System.err(17739): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
05-12 21:50:24.005: W/System.err(17739): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
05-12 21:50:24.005: W/System.err(17739): at java.lang.Thread.run(Thread.java:856) 
05-12 21:50:24.005: W/System.err(17739): Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown 
05-12 21:50:24.005: W/System.err(17739): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
05-12 21:50:24.005: W/System.err(17739): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:192) 
05-12 21:50:24.010: W/System.err(17739): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:217) 
05-12 21:50:24.010: W/System.err(17739): ... 13 more` 

मेरे Android कोड:

public class MainActivity extends Activity { 
    private static final String PREF_ACCOUNT_NAME = "pref.account.name"; 
    public static final String AUDIENCE = "server:client_id:660102392535.apps.googleusercontent.com"; 
    SharedPreferences settings; 
    GoogleAccountCredential credential; 
    String accountName; 
    static final int REQUEST_ACCOUNT_PICKER = 2; 
    Myendpoint service; 

    void chooseAccount() { 
     startActivityForResult(credential.newChooseAccountIntent(), 
       REQUEST_ACCOUNT_PICKER); 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     credential = GoogleAccountCredential 
       .usingAudience(
         this,AUDIENCE); 

     settings = getSharedPreferences("SafeAndroid", 0); 
     setAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

     Myendpoint.Builder builder = new Myendpoint.Builder(
       AndroidHttp.newCompatibleTransport(), new GsonFactory(), 
       credential); 
     service = builder.build(); 

     if (credential.getSelectedAccountName() != null) { 
      Toast.makeText(getApplicationContext(), 
        "logged as: " + credential.getSelectedAccountName(), 5000) 
        .show(); 
      sendRequest(); 
     } else { 
      chooseAccount(); 
     } 

    } 

    private class QueryScoresTask extends AsyncTask<Void, Void, Void> { 
     Context context; 

     public QueryScoresTask(Context context) { 
      this.context = context; 
     } 

     protected Void doInBackground(Void... unused) { 
      Log.v("AAAAA", "2"); 
      try { 
       MyEntity e = service.myentity().get().execute(); 
       Log.v("AAAAA", e.toString() + ""); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return null; 
     } 
    } 

    private void setAccountName(String accountName) { 
     SharedPreferences.Editor editor = settings.edit(); 
     editor.putString(PREF_ACCOUNT_NAME, accountName); 
     editor.commit(); 
     credential.setSelectedAccountName(accountName); 
     this.accountName = accountName; 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     switch (requestCode) { 
     case REQUEST_ACCOUNT_PICKER: 
      if (data != null && data.getExtras() != null) { 
       String accountName = data.getExtras().getString(
         AccountManager.KEY_ACCOUNT_NAME); 
       if (accountName != null) { 
        setAccountName(accountName); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putString(PREF_ACCOUNT_NAME, accountName); 
        editor.commit(); 
        Toast.makeText(
          getApplicationContext(), 
          "logged as: " + credential.getSelectedAccountName(), 
          5000).show(); 
        sendRequest(); 
       } 
      } 
      break; 
     } 
    } 

    private void sendRequest() { 
     QueryScoresTask a = new QueryScoresTask(this); 
     a.execute(); 
    } 

} 

और मेरे endpoint कोड:

@Api(name = "myendpoint", version = "v1",description = "This retrieves an instance of MyEntity.", clientIds = { 
      "660102392535.apps.googleusercontent.com", "660102392535-dobseln3gde8e6lqnd2v80l3oh6mm1nh.apps.googleusercontent.com" }, audiences = { "660102392535.apps.googleusercontent.com" }) 
public class MyEndpoint { 

    @ApiMethod(httpMethod = "GET", name = "myentity.get", path = "myentity/get") 
    public MyEntity getEntity(User user) { 
     MyBusinessClass myBusinessClass = new MyBusinessClass(); 
     MyEntity myEntity = myBusinessClass.getMyEntity(); 

     DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
     Entity device = new Entity("gcmid", "keyname"); 
     device.setProperty("account", user.getEmail()); 
     device.setProperty("device", "idtelefonu1"); 
     datastore.put(device); 

     return myEntity; 
    } 
} 

मैंने पढ़ा है कि कुछ लोगों को लगता है कि समस्या थी, लेकिन किया इसे हल करने के लिए मत लिखो। मैंने नई डीबग.की बनाई और नया sha1 प्राप्त किया लेकिन काम नहीं किया। नए पैकेज के साथ नई एंड्रॉइड प्रोजेक्ट बनाने की भी कोशिश की - काम नहीं किया।

+0

hellow @ user1262348 मुझे एक ही समस्या है क्योंकि आपको एंड्रॉइड में एंडपॉइंट्स के साथ त्रुटि मिलती है: GoogleAuthIOException अगर आपको कोई समाधान मिलता है तो कृपया मेरी मदद करें। –

उत्तर

0

मैं टिक टैक टो उदाहरण के साथ एक ही त्रुटि में भाग गया।

मेरे लिए, यह पता चला कि मैंने गलत निर्देशों को पढ़ा है।

"660102392535.apps.googleusercontent.com"

अपने वेब क्लाइंट कुंजी के साथ

:

"660102392535-dobseln3gde8e6lqnd2v80l3oh6mm1nh.apps.googleusercontent.com"

अपने Android कोड में, अपने Android ग्राहक कुंजी की जगह का प्रयास करें।

मुझे पता है कि यह समझ में नहीं आता है लेकिन यह मेरे लिए काम करता है।

स्टीव

+0

इसे पहले से ही कोशिश की गई ... यह काम नहीं किया ... – user1262348

+0

ठीक है, अगला कदम .... जब आप एपीआई कंसोल में अपनी क्लाइंट कुंजी बनाते हैं, तो सुनिश्चित करें कि पैकेज का नाम AndroidManifest.xml से मान से मेल खाता है। E.G. पैकेज = "com.google.devrel.samples.ttt"। – samneric

+0

फिर अपनी वेब क्लाइंट कुंजी के साथ, सुनिश्चित करें कि यूआरएल मेल खाता है जो एंड्रॉइड ऐप ई.जी. से कनेक्ट करने का प्रयास कर रहा है। "https: // .appspot.com" – samneric

3

आप खिड़कियों पर एडीटी का उपयोग कर रहे हैं? यदि हां, तो डीबग कीस्टोर के लिए sha1 फिंगरप्रिंट विंडोज-> प्राथमिकताएं-> एंड्रॉइड-> डीबग मोड के लिए बनाएं में प्राप्त किया जा सकता है।

0

"AppConstants.java" (ट्यूटोरियल्स से नाम) में मैंने WEB_CLIENT_ID को उसी वेब क्लाइंट आईडी में बदल दिया है जैसे कि GAE क्रेडेंशियल-स्क्रीन में। ट्यूटोरियल के मुताबिक, यह एंड्रॉइड क्लाइंट आईडी होना चाहिए, इसलिए समस्याएं हैं।

0

मेरी समस्या यह थी कि मैंने अपने रिलीज कीस्टोर से SHA1 के साथ प्रमाण-पत्र बनाए। मुझे लगता है कि आपको एहसास हुआ कि आपको डीबग कीस्टोर का उपयोग करना है, लेकिन हो सकता है कि आप रिलीज संस्करण लेने, हस्ताक्षरित एपीके निर्यात करने का प्रयास कर सकें, इसे अपने फोन पर कॉपी करें और इसे वहां से इंस्टॉल करें। मेरे मामले में काम किया।

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