2011-07-27 14 views
15

AccountManager::getAuthTokenByFeatures kullanıldığında, kullanıcının hesaba erişmesine izin vermesi veya erişimi reddetmesi için bir Erişim İsteği ekranı görüntülenir. Bir kullanıcı erişime izin verdikten sonra, sonraki aramalar (aynı argümanlarla), kullanıcıya sormadan auth jetonunu döndürür.Bir kullanıcı zaten erişime izin verdikten sonra AccountManager'ı "Erişim İsteği" ekranını göstermeye nasıl zorlarsınız?

Erişim İsteğinin sorulduğundan emin olmak için durumu nasıl temizlersiniz? (Bu, geliştirme, test etme ve demo amaçlı en azından yararlı olur.)

cevap

7

Bulduğum tek çözüm, sistem hesaplarında saklanan verileri el ile temizlemektir. Sistemdeki tüm hesap desteklerini temizlemek için komut satırından aşağıdakileri çalıştırın. emülatörü için

: Bir cihaz için

adb -e shell 'sqlite3 /data/system/accounts.db "delete from grants;"' 

(köklü ve yüklü Sqlite3 ikili olması gerekir): Ben test için kullanmak yeni bir hesap oluşturmuş

adb -d shell 'echo sqlite3 /data/system/accounts.db \"delete from grants\;\" | su' 
+0

sonunda yararlı bir not google izinleri vermek için tekrar sordum başlamıştı yapmak: Eğer Sqlite3 cihazda zaten değilse, sistem klasörü yazılabilir yapmak gerekir ve belki adb ile zorlamak gerekir. http://stackoverflow.com/questions/6066030/read-only-file-system-on-android –

+0

Başka bir ipucu: "sqlite" ı tırnak ile çağırmam gerekiyordu, aksi halde bir hata aldım. Bkz. Http://stackoverflow.com/questions/13696259/sqlite3-on-android-fails-with-syntax-error-unexpected/13697187#13697187 –

+2

Bu problemde hala yolun aşağısında bulunanlar için ilgi: (1) Çok kullanıcılı destek ekleyen Android 4.2'de, account.db dosyası kullanıcı başına bir alt dizine yerleştirilir. /data/system/users/0/accounts.db (2) Bu izinleri iptal etme ihtiyacım olduğunda, /data/system/users/0/accounts.db adresindeki hibe tablosunun boş olduğunu tespit ettim. Jeton almak için yeni Google Play Hizmetleri libresini kullanıyordum ve bu, hibeleri başka bir yerde (muhtemelen bulutta bile!) Saklıyor gibi görünüyordu. – Hugh

1

. Yeni bir hesap her zaman Erişim İsteğini isteyecektir. Erişime izin VERMEZ.

Giriş ekranını test etmek için, hesabın şifresini başka bir cihazdan/PC'den değiştirin.

1

kullanma Google Play Hizmetler:

http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html

sizin kapsamına https://www.googleapis.com/auth/userinfo.profile ekleyin.

Örnek:

String scope="oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile" 

final String token = GoogleAuthUtil.getToken(context, "[email protected]", scope); 

VEYA "kaba kuvvet" Artık

Intent res = new Intent(); 
res.addCategory("account:[email protected]"); 
res.addCategory("scope:oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); 
res.putExtra("service", "oauth2:https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"); 
Bundle extra= new Bundle(); 
extra.putString("androidPackageName","com.your.package"); 
res.putExtra("callerExtras",extra); 
res.putExtra("androidPackageName","com.your.package"); 
res.putExtra("authAccount","[email protected]"); 

String mPackage = "com.google.android.gms"; 
String mClass = "com.google.android.gms.auth.TokenActivity"; 
res.setComponent(new ComponentName(mPackage,mClass)); 
startActivityForResult(res,100); 

, buradan https://accounts.google.com/IssuedAuthSubTokens erişimini iptal zaman uygulama cihazında tekrar size izin penceresini gösterir.

0

Durumumda Benn Sandoval'ın söylediği şey işe yaramıyor.

İzinleri program aracılığıyla iptal etmek ve sonra yeniden bağlanmak zorunda kaldım.

if (googleApiClient != null && !googleApiClient.isConnecting() && googleApiClient.isConnected()){ 

    googleApiClient.clearDefaultAccountAndReconnect(); 
    Plus.AccountApi.revokeAccessAndDisconnect(googleApiClient).setResultCallback(new ResultCallback<Status>() { 
     @Override 
     public void onResult(Status status) { 
      Log.i("google+", "Google+ user access revoked"); 
      googleApiClient.connect(); 
     } 
    }); 
} 

bu i başkaları için +

İlgili konular