2011-04-27 12 views
9

के लिए खाते के लिए अनुमति को निरस्त करें मैं एक कोड है कि खाता प्रबंधक से एक AuthToken का अनुरोध() ने लिखा है, getAuthToken का उपयोग कर। पहली बार - उपयोगकर्ता को प्रमाणीकरण "अनुमति" की आवश्यकता होती है, लेकिन बाद में इसकी आवश्यकता नहीं होती है।कोई एप्लिकेशन

मैं वहाँ, कि अनुमति को निरस्त करने के लिए, एंड्रॉयड सिस्टम या कोड का उपयोग क्रम में मुझे मेरे कार्यक्रम (मैं खातों से चल रहा हूँ :)) डिबग मदद करने के लिए एक तरीका है जानना चाहते हैं। ऐप को अनइंस्टॉल करने से मदद नहीं मिलती है।

धन्यवाद,

उदी

उत्तर

10

मैंने पाया है कि जब आप को हटाने और खाते को पुन: जोड़ने के लिए, तो अनुमति निरस्त किया गया है, और आप इसे फिर से अनुमति देने के लिए किया है।

सबसे आसान तरीका है मैं मिल गया है, मैं जवाब के रूप में यह अंकन कर रहा हूँ जब तक कि मैं एक बेहतर एक मिलेगा कि।

+0

खाता हटाएं और दोबारा जोड़ें, फिर अनुमति रद्द कर दी गई है ... यह गलत है! –

+0

आप भगवान हैं। यह एकमात्र तरीका है जो एसओ पर देखने के बाद मेरे लिए काम करता है। धन्यवाद। – 0x4B1D

0

आप/एक पूर्ण स्थापना रद्द करने के लिए प्रभाव में उसे निरस्त पुनर्स्थापित करने के लिए आवश्यकता हो सकती है। साथ ही, यदि आप एक विशिष्ट sharedUserId का उपयोग कर रहे हैं, तो आप अनइंस्टॉल करने के बाद sharedUserId को बदल सकते हैं, इसलिए यह एक अलग खाता जैसा दिखता है। अंत में, आप इसे एक अलग प्रमाण के साथ साइन कर सकते हैं। यही वह है जिसे मैं दूर करने में सक्षम हूं, लेकिन रद्द करने के लिए एक स्वच्छ एपीआई (या यहां तक ​​कि केवल एक गतिविधि) अच्छा होगा।

+0

ठीक है, मैं एक पूर्ण स्थापना रद्द करें/पुनः स्थापित किया था, कि didn मदद नहीं मैं एक साझा यूजर आईडी का भी उपयोग नहीं कर रहा हूं। – Udinic

+0

हाँ, आपको ओएस को बल के तहत एक differente उपयोगकर्ता आईडी असाइन करने के लिए मजबूर करने के लिए sharedUserId को आजमाने और सेट करने की आवश्यकता हो सकती है। – Femi

0

मैं (केवल परीक्षण के लिए) परछाई उपयोग करने की कोशिश। दुर्भाग्य से, यह एक SecurityException फेंकता है क्योंकि Android जाँच करता है कि फोन करने वाले एक सिस्टम एप्लिकेशन है ...

संदर्भ के लिए, कोड है:

/** 
    * Revoke the fact that current app is allowed to retrieve an authToken for an account. 
    * @param accountName The account whose permissions are being revoked 
    * @param context current context 
    * @return true if revoked successfully, false otherwise 
    */ 
    public static boolean revokeAppPermission(String accountName, Context context) { 
     if (accountName == null) { 
      Log.w(TAG, "revokeAppPermission: abort, account missing."); 
      return false; 
     } 

     AccountManager accountManager = AccountManager.get(context); 
     Account[] accounts = accountManager.getAccounts(); 
     Account accountToRevoke = null; 
     for (Account account : accounts) { 
      if (accountName.equals(account.name)) { 
       accountToRevoke = account; 
       break; 
      } 
     } 

     if (accountToRevoke == null) { 
      Log.w(TAG, "revokeAppPermission: abort, no account found."); 
      return false; 
     } 

     try { 
      // public void updateAppPermission(Account account, String authTokenType, int uid, boolean value) { 
      Method updateAppPermissionMethod = AccountManager.class.getDeclaredMethod("updateAppPermission", 
        Account.class, String.class, int.class, boolean.class); 
      updateAppPermissionMethod.setAccessible(true); 
      updateAppPermissionMethod.invoke(accountManager, // Instance to invoke the method on 
        accountToRevoke, // account 
        "oauth2:https://www.googleapis.com/auth/somegoogleservice", // authTokenType 
        context.getApplicationInfo().uid, // uid 
        false); // false to revoke 
     } catch (Exception e) { 
      Log.w(TAG, "revokeAppPermission: Failed:" + e.getMessage()); 
      e.printStackTrace(); 
      return false; 
     } 

     return true; 
    } 
संबंधित मुद्दे