2013-08-27 8 views
5

I Token am Erzeugung GoogleUtilAuth.getToken() verwenden. Ich habe auch zwei Client generiert IDs eine für die Homepage und eine für Android-Anwendung und beide sind in demselben Projekt .Followed LinkGoogleAuthException unbekannte Quelle

verification from back end server

hier ist mein Code:

package com.example.tokengenerate; 

import java.io.IOException; 

import com.google.android.gms.auth.GoogleAuthException; 
import com.google.android.gms.auth.GoogleAuthUtil; 
import com.google.android.gms.auth.UserRecoverableAuthException; 
import com.google.android.gms.common.Scopes; 

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.accounts.Account; 
import android.accounts.AccountManager; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.TextView; 

public class MainActivity extends Activity { 
    TextView tv; 
    String scope="audience:server:client_id:CLIENTID OF WEBPAGE"; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tv =(TextView)findViewById(R.id.printId); 
    new AsyncTask<Void, Void, Void>() { 
     String id=null; 
     @Override 
     protected void onPostExecute(Void result) { 
      // TODO Auto-generated method stub 
      tv.setText(id); 
      super.onPostExecute(result); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 

       String[] account=getAccountNames(); 
       for(int i =0;i<account.length;i++) 
       { 
        try { 
        Log.e("account name", account[i]); 
        id=GoogleAuthUtil.getToken(MainActivity.this, account[i], scope); 
         Log.e("google id",id); 
        } catch (UserRecoverableAuthException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (IOException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } catch (GoogleAuthException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
       } 



      return null; 
     } 
    }.execute(null,null,null); 


    } 
    private String[] getAccountNames() { 
     AccountManager mAccountManager = AccountManager.get(this); 
     Account[] accounts = mAccountManager.getAccountsByType(
       GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
     String[] names = new String[accounts.length]; 
     for (int i = 0; i < names.length; i++) { 
      names[i] = accounts[i].name; 
     } 
     return names; 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

} 

hier ist meine Logcat:

08-27 19:19:54.641: W/System.err(9792): com.google.android.gms.auth.GoogleAuthException: Unknown 
08-27 19:19:54.651: W/System.err(9792):  at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
08-27 19:19:54.651: W/System.err(9792):  at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
08-27 19:19:54.651: W/System.err(9792):  at com.example.tokengenerate.MainActivity$1.doInBackground(MainActivity.java:45) 
08-27 19:19:54.661: W/System.err(9792):  at com.example.tokengenerate.MainActivity$1.doInBackground(MainActivity.java:1) 
08-27 19:19:54.661: W/System.err(9792):  at android.os.AsyncTask$2.call(AsyncTask.java:264) 
08-27 19:19:54.661: W/System.err(9792):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
08-27 19:19:54.661: W/System.err(9792):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
08-27 19:19:54.661: W/System.err(9792):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
08-27 19:19:54.661: W/System.err(9792):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
08-27 19:19:54.661: W/System.err(9792):  at java.lang.Thread.run(Thread.java:864) 

total stecken bitte help.Not bekommen, wo ich falsch

gehe
+0

Können wir die Ausgabe von Log.e ("account name") sehen? Auf den ersten Blick sieht Ihr Code vernünftig aus –

+0

@TimBray Vielen Dank Sir für die Antwort. Im Account-Namen zeigt es Emial Id zB "[email protected]" auch gibt es diesen Fehler nur, wenn ich scope = Publikum setzen: Server: client_id : CLIENTID OF WEBPAGE. Aber wenn ich scope = https://www.googleapis.com/auth/plus setze, dann habe ich das Token bekommen. –

+1

Sie könnten versuchen, dem Bereich das Präfix 'oauth2:' hinzuzufügen. –

Antwort

0

Verwenden Sie diesen Code, um den Umfang

String scope = "oauth2:" + Scopes.PROFILE; 

und benutzen Sie diese SCPE hier

id=GoogleAuthUtil.getToken(MainActivity.this, account[i], scope); 

Dann können Sie Ihren Zugang zu erhalten zu bekommen tacken in Variable "id" .Einfache Methode.

Verwandte Themen