2013-02-15 4 views
1

이전에 Google API를 사용하려면 OAuth2를 사용하여 인증 토큰을 획득 한 Google 계정에서 인증을 받아야합니다. 글쎄, 가능하다면 안드로이드에서 OAuth2를 사용하면 Google API를 사용하지 않고도 Google 계정에서 인증 할 수 있습니다. Google Apps 스크립트 스크립트를 실행하려면 Google 계정에서 인증해야합니다. 즉, 코드에 따라이 매개 변수를 처리하는 스크립트에 대한 GET 또는 POST 매개 변수화 된 요청 만 수행하면됩니다.Android : Google API가없는 Google 계정에서 OAuth2를 사용하려면

답변

1

예, 가능합니다. HttpUtil에,

public class UploadFileGASActivity extends Activity { 
    public final static String GAS_HELLO_WORLD = "url_to_gas_script"; 
    public static boolean authTokenInvalidated = false; 

    public class OnTokenAdquired implements AccountManagerCallback<Bundle>{ 
     public void run(AccountManagerFuture<Bundle> future){ 
      Log.v("CALLBACK","post-getAuthToken"); 
      try { 
       Bundle authTokenBundle = future.getResult(); 

       if (authTokenBundle.containsKey(AccountManager.KEY_AUTHTOKEN)){ 
        String authTokenStr = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); 
        String accountName = authTokenBundle.getString(AccountManager.KEY_ACCOUNT_NAME); 
        String accountType = authTokenBundle.getString(AccountManager.KEY_ACCOUNT_TYPE); 
        Log.v("ACCOUNT NAME",accountName); 
        Log.v("ACCOUNT TYPE",accountType); 
        Log.v("TOKEN",authTokenStr); 
        if (!authTokenInvalidated) { 
         invalidateAuthToken("com.google",authTokenStr); 
         authTokenInvalidated = true; 
         Log.v("CALLBACK","authTokenInvalidated == true"); 
         getAuthToken(); 
         return; 
        } 
        else { 
         authTokenInvalidated = false; 
         Log.v("CALLBACK","authTokenInvalidated == false"); 
        } 
        HttpUtil httpUtil = new HttpUtil(); 
        String responseStr = httpUtil.getResponseFromHttpRequest(GAS_HELLO_WORLD, authTokenStr); 
        Log.v("GAS_HELLO_WORLD",responseStr); 
        TextView textView = (TextView)findViewById(R.id.text_upload_file_gas); 
        textView.setText(authTokenStr); 
       } 
       else { 
        Log.v("KEY_AUTHTOKEN","non hai auth token, normal cando non hai conexion"); 
       } 
       if (authTokenBundle.containsKey(AccountManager.KEY_INTENT)) { 
        Log.e("KEY_INTENT","temos KEY_INTENT"); 
        Intent launch = (Intent)authTokenBundle.get(AccountManager.KEY_INTENT); 
        startActivityForResult(launch,0); 
        return; 
       } 
      } 
      catch (AuthenticatorException e){ 
       Log.e("OnTokenAdquired.run","AuthenticatorException"); 
      } 
      catch (IOException e){ 
       Log.e("OnTokenAdquired.run","IOException"); 
      } 
      catch (OperationCanceledException e){ 
       Log.e("OnTokenAdquired.run","OperationCanceledException"); 
      } 
     } 
    } 
    public void getAuthToken() { 
     AccountManager accountManager = AccountManager.get(this); 
     Bundle options = new Bundle(); 
     OnTokenAdquired onTokenAdquired = new OnTokenAdquired(); 
     Handler handler = new Handler(); 
     Account[] accounts = accountManager.getAccountsByType("com.google"); 
     String authTokenType = "oauth2:https://www.googleapis.com/auth/drive"; 
     AccountManagerFuture<Bundle> future = accountManager.getAuthToken(accounts[1], 
      authTokenType, options, this, onTokenAdquired, handler); 
    } 
    public void invalidateAuthToken(String accountType, String authToken){ 
     AccountManager accountManager = AccountManager.get(this); 
     accountManager.invalidateAuthToken(accountType, authToken); 
    } 

    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     //Activity.RESULT_OK; 
     Bundle extras = data.getExtras(); 
     Set<String> keys = extras.keySet(); 
     Iterator<String> iter = keys.iterator(); 
     Log.v("KEY_INTENT","requestCode: "+requestCode+", resultCode: "+resultCode); 
     Log.v("KEY_INTENT","EXTRAS KEY_INTENT"); 
     while (iter.hasNext()){ 
       Log.v("KEY_INTENT",(String)iter.next()); 
     } 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_upload_file_gas); 
      Log.v("GAS","UploadFileGASActivity called."); 
     getAuthToken(); 
    } 
} 

을 그리고 : 대한 코드는 그것을 할

public String getResponseFromHttpRequest(String httpRequest, String authToken) { 
     [..] 
     request.setHeader("Authorization", "OAuth "+authToken); 
     [..] 
    } 

내가이 사람을 도움이되기를 바랍니다. 어쨌든 고마워, .

+0

일부 Android Google API를 사용하여 액세스 토큰 만료 시간을 검색 할 수 있습니까? 아니면 HTTPS 요청을 통해서만 가능합니까? –

관련 문제