2013-08-27 23 views
5

tôi đang tạo ra dấu hiệu sử dụng GoogleUtilAuth.getToken(). Tôi cũng đã tạo ra hai id khách hàng một cho trang web và một cho ứng dụng Android và cả hai đều trong cùng một dự án .Followed liên kết nàyGoogleAuthException Unknown Source

verification from back end server

đây là mã của tôi:

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; 
    } 

} 

đây là Logcat tôi:

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) 

Hoàn toàn bị mắc kẹt xin help.Not nhận nơi tôi đang đi sai

+0

Chúng ta có thể thấy kết quả từ Log.e ("tên tài khoản") không? Trong nháy mắt đầu tiên, mã của bạn có vẻ hợp lý –

+0

@TimBray Cảm ơn bạn đã trả lời.Trong tên tài khoản, nó đang hiển thị Id em bé, ví dụ "[email protected]", nó cũng đưa ra lỗi này chỉ khi tôi đặt scope = audience: server: client_id : CLIENTID OF WEBPAGE.Nhưng nếu tôi đặt scope = https://www.googleapis.com/auth/plus thì tôi đã nhận được mã thông báo. –

+1

Bạn có thể thử thêm tiền tố 'oauth2:' vào phạm vi. –

Trả lời

0

Sử dụng mã này để có được phạm vi

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

và sử dụng scpe này đây

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

Sau đó, bạn có thể truy cập của bạn tocken trong biến "id". Phương thức đơn giản.