blob: 29d50a2d08af0a56983c1f15668922a030f075d4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width" />
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
<title>GoogleAuthUtil | Android Developers</title>
<!-- STYLESHEETS -->
<link rel="stylesheet"
href="//fonts.googleapis.com/css?family=Roboto+Condensed">
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:light,regular,medium,thin,italic,mediumitalic,bold"
title="roboto">
<link href="/assets/css/default.css?v=5" rel="stylesheet" type="text/css">
<!-- JAVASCRIPT -->
<script src="//www.google.com/jsapi" type="text/javascript"></script>
<script src="/assets/js/android_3p-bundle.js" type="text/javascript"></script>
<script type="text/javascript">
var toRoot = "/";
var metaTags = [];
var devsite = false;
</script>
<script src="/assets/js/docs.js?v=3" type="text/javascript"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-5831155-1', 'android.com');
ga('create', 'UA-49880327-2', 'android.com', {'name': 'universal'}); // New tracker);
ga('send', 'pageview');
ga('universal.send', 'pageview'); // Send page view for new tracker.
</script>
</head>
<body class="gc-documentation google
develop reference" itemscope itemtype="http://schema.org/Article">
<div id="doc-api-level" class="" style="display:none"></div>
<a name="top"></a>
<a name="top"></a>
<!-- dialog to prompt lang pref change when loaded from hardcoded URL
<div id="langMessage" style="display:none">
<div>
<div class="lang en">
<p>You requested a page in English, would you like to proceed with this language setting?</p>
</div>
<div class="lang es">
<p>You requested a page in Spanish (Español), would you like to proceed with this language setting?</p>
</div>
<div class="lang ja">
<p>You requested a page in Japanese (日本語), would you like to proceed with this language setting?</p>
</div>
<div class="lang ko">
<p>You requested a page in Korean (한국어), would you like to proceed with this language setting?</p>
</div>
<div class="lang ru">
<p>You requested a page in Russian (Русский), would you like to proceed with this language setting?</p>
</div>
<div class="lang zh-cn">
<p>You requested a page in Simplified Chinese (简体中文), would you like to proceed with this language setting?</p>
</div>
<div class="lang zh-tw">
<p>You requested a page in Traditional Chinese (繁體中文), would you like to proceed with this language setting?</p>
</div>
<a href="#" class="button yes" onclick="return false;">
<span class="lang en">Yes</span>
<span class="lang es">Sí</span>
<span class="lang ja">Yes</span>
<span class="lang ko">Yes</span>
<span class="lang ru">Yes</span>
<span class="lang zh-cn">是的</span>
<span class="lang zh-tw">没有</span>
</a>
<a href="#" class="button" onclick="$('#langMessage').hide();return false;">
<span class="lang en">No</span>
<span class="lang es">No</span>
<span class="lang ja">No</span>
<span class="lang ko">No</span>
<span class="lang ru">No</span>
<span class="lang zh-cn">没有</span>
<span class="lang zh-tw">没有</span>
</a>
</div>
</div> -->
<!-- Header -->
<div id="header-wrapper">
<div id="header">
<div class="wrap" id="header-wrap">
<div class="col-3 logo">
<a href="/index.html">
<img src="/assets/images/dac_logo.png"
srcset="/assets/images/dac_logo@2x.png 2x"
width="123" height="25" alt="Android Developers" />
</a>
<div class="btn-quicknav" id="btn-quicknav">
<a href="#" class="arrow-inactive">Quicknav</a>
<a href="#" class="arrow-active">Quicknav</a>
</div>
</div>
<ul class="nav-x col-9">
<li class="design">
<a href="/design/index.html"
zh-tw-lang="設計"
zh-cn-lang="设计"
ru-lang="Проектирование"
ko-lang="디자인"
ja-lang="設計"
es-lang="Diseñar"
>Design</a></li>
<li class="develop"><a href="/develop/index.html"
zh-tw-lang="開發"
zh-cn-lang="开发"
ru-lang="Разработка"
ko-lang="개발"
ja-lang="開発"
es-lang="Desarrollar"
>Develop</a></li>
<li class="distribute last"><a href="/distribute/index.html"
zh-tw-lang="發佈"
zh-cn-lang="分发"
ru-lang="Распространение"
ko-lang="배포"
ja-lang="配布"
es-lang="Distribuir"
>Distribute</a></li>
</ul>
<div class="menu-container">
<div class="moremenu">
<div id="more-btn"></div>
</div>
<div class="morehover" id="moremenu">
<div class="top"></div>
<div class="mid">
<div class="header">Links</div>
<ul>
<li><a href="https://play.google.com/apps/publish/" target="_googleplay">Google Play Developer Console</a></li>
<li><a href="http://android-developers.blogspot.com/">Android Developers Blog</a></li>
<li><a href="/about/index.html">About Android</a></li>
</ul>
<div class="header">Android Sites</div>
<ul>
<li><a href="http://www.android.com">Android.com</a></li>
<li class="active"><a>Android Developers</a></li>
<li><a href="http://source.android.com">Android Open Source Project</a></li>
</ul>
<div class="header">Language</div>
<div id="language" class="locales">
<select name="language" onChange="changeLangPref(this.value, true)">
<option value="en">English</option>
<option value="es">Español</option>
<option value="ja">日本語</option>
<option value="ko">한국어</option>
<option value="ru">Русский</option>
<option value="zh-cn">中文(简体)</option>
<option value="zh-tw">中文(繁體)</option>
</select>
</div>
<script type="text/javascript">
<!--
loadLangPref();
//-->
</script>
<br class="clearfix" />
</div><!-- end 'mid' -->
<div class="bottom"></div>
</div><!-- end 'moremenu' -->
<div class="search" id="search-container">
<div class="search-inner">
<div id="search-btn"></div>
<div class="left"></div>
<form onsubmit="return submit_search()">
<input id="search_autocomplete" type="text" value="" autocomplete="off" name="q"
onfocus="search_focus_changed(this, true)" onblur="search_focus_changed(this, false)"
onkeydown="return search_changed(event, true, '/')"
onkeyup="return search_changed(event, false, '/')" />
</form>
<div class="right"></div>
<a class="close hide">close</a>
<div class="left"></div>
<div class="right"></div>
</div><!-- end search-inner -->
</div><!-- end search-container -->
<div class="search_filtered_wrapper reference">
<div class="suggest-card reference no-display">
<ul class="search_filtered">
</ul>
</div>
</div>
<div class="search_filtered_wrapper docs">
<div class="suggest-card dummy no-display">&nbsp;</div>
<div class="suggest-card develop no-display">
<ul class="search_filtered">
</ul>
<div class="child-card guides no-display">
</div>
<div class="child-card training no-display">
</div>
<div class="child-card samples no-display">
</div>
</div>
<div class="suggest-card design no-display">
<ul class="search_filtered">
</ul>
</div>
<div class="suggest-card distribute no-display">
<ul class="search_filtered">
</ul>
</div>
</div>
</div><!-- end menu-container (search and menu widget) -->
<!-- Expanded quicknav -->
<div id="quicknav" class="col-13">
<ul>
<li class="about">
<ul>
<li><a href="/about/index.html">About</a></li>
<li><a href="/wear/index.html">Wear</a></li>
<li><a href="/tv/index.html">TV</a></li>
<li><a href="/auto/index.html">Auto</a></li>
</ul>
</li>
<li class="design">
<ul>
<li><a href="/design/index.html">Get Started</a></li>
<li><a href="/design/devices.html">Devices</a></li>
<li><a href="/design/style/index.html">Style</a></li>
<li><a href="/design/patterns/index.html">Patterns</a></li>
<li><a href="/design/building-blocks/index.html">Building Blocks</a></li>
<li><a href="/design/downloads/index.html">Downloads</a></li>
<li><a href="/design/videos/index.html">Videos</a></li>
</ul>
</li>
<li class="develop">
<ul>
<li><a href="/training/index.html"
zh-tw-lang="訓練課程"
zh-cn-lang="培训"
ru-lang="Курсы"
ko-lang="교육"
ja-lang="トレーニング"
es-lang="Capacitación"
>Training</a></li>
<li><a href="/guide/index.html"
zh-tw-lang="API 指南"
zh-cn-lang="API 指南"
ru-lang="Руководства по API"
ko-lang="API 가이드"
ja-lang="API ガイド"
es-lang="Guías de la API"
>API Guides</a></li>
<li><a href="/reference/packages.html"
zh-tw-lang="參考資源"
zh-cn-lang="参考"
ru-lang="Справочник"
ko-lang="참조문서"
ja-lang="リファレンス"
es-lang="Referencia"
>Reference</a></li>
<li><a href="/sdk/index.html"
zh-tw-lang="相關工具"
zh-cn-lang="工具"
ru-lang="Инструменты"
ko-lang="도구"
ja-lang="ツール"
es-lang="Herramientas"
>Tools</a>
</li>
<li><a href="/google/index.html">Google Services</a>
</li>
<li><a href="/samples/index.html">Samples</a>
</li>
</ul>
</li>
<li class="distribute last">
<ul>
<li><a href="/distribute/googleplay/index.html">Google Play</a></li>
<li><a href="/distribute/essentials/index.html">Essentials</a></li>
<li><a href="/distribute/users/index.html">Get Users</a></li>
<li><a href="/distribute/engage/index.html">Engage &amp; Retain</a></li>
<li><a href="/distribute/monetize/index.html">Monetize</a></li>
<li><a href="/distribute/analyze/index.html">Analyze</a></li>
<li><a href="/distribute/tools/index.html">Tools &amp; Reference</a></li>
<li><a href="/distribute/stories/index.html">Developer Stories</a></li>
</ul>
</li>
</ul>
</div><!-- /Expanded quicknav -->
</div><!-- end header-wrap.wrap -->
</div><!-- end header -->
<!-- Secondary x-nav -->
<div id="nav-x">
<div class="wrap" style="position:relative;z-index:1">
<ul class="nav-x col-9 develop" style="width:100%">
<li class="training"><a href="/training/index.html"
zh-tw-lang="訓練課程"
zh-cn-lang="培训"
ru-lang="Курсы"
ko-lang="교육"
ja-lang="トレーニング"
es-lang="Capacitación"
>Training</a></li>
<li class="guide"><a href="/guide/index.html"
zh-tw-lang="API 指南"
zh-cn-lang="API 指南"
ru-lang="Руководства по API"
ko-lang="API 가이드"
ja-lang="API ガイド"
es-lang="Guías de la API"
>API Guides</a></li>
<li class="reference"><a href="/reference/packages.html"
zh-tw-lang="參考資源"
zh-cn-lang="参考"
ru-lang="Справочник"
ko-lang="참조문서"
ja-lang="リファレンス"
es-lang="Referencia"
>Reference</a></li>
<li class="tools"><a href="/sdk/index.html"
zh-tw-lang="相關工具"
zh-cn-lang="工具"
ru-lang="Инструменты"
ko-lang="도구"
ja-lang="ツール"
es-lang="Herramientas"
>Tools</a></li>
<li class="google"><a href="/google/index.html"
>Google Services</a>
</li>
<li class="samples"><a href="/samples/index.html"
>Samples</a>
</li>
</ul>
</div>
</div>
<!-- /Sendondary x-nav DEVELOP -->
<div id="searchResults" class="wrap" style="display:none;">
<h2 id="searchTitle">Results</h2>
<div id="leftSearchControl" class="search-control">Loading...</div>
</div>
</div> <!--end header-wrapper -->
<div id="sticky-header">
<div>
<a class="logo" href="#top"></a>
<a class="top" href="#top"></a>
<ul class="breadcrumb">
<li class="current">GoogleAuthUtil</li>
</ul>
</div>
</div>
<div class="wrap clearfix" id="body-content">
<div class="col-4" id="side-nav" itemscope itemtype="http://schema.org/SiteNavigationElement">
<div id="devdoc-nav" class="scroll-pane">
<ul id="nav">
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/index.html">
<span class="en">Overview</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/games.html">
<span class="en">Games</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/location.html">
<span class="en">Location</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/plus.html">
<span class="en">Google+</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/maps.html">
<span class="en">Maps</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/drive.html">
<span class="en">Drive</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/cast.html">
<span class="en">Cast</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/ads.html">
<span class="en">Ads</span></a>
</div>
<ul>
<li><a href="/google/play-services/id.html">
<span class="en">Advertising ID</span></a>
</li>
</ul>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/play-services/wallet.html">
<span class="en">Wallet</span>
</a></div>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play-services/index.html">
<span class="en">Google Play Services</span></a>
</div>
<ul>
<li><a href="/google/play-services/setup.html">
<span class="en">Setting Up Google Play Services</span></a>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/auth/api-client.html">
<span class="en">Accessing Google APIs</span></a>
</div>
<ul>
<li>
<a href="/google/auth/http-auth.html">
<span class="en">Authorizing with Google for REST APIs</span>
</a>
</li>
</ul>
</li>
<li id="gms-tree-list" class="nav-section">
<div class="nav-section-header">
<a href="/reference/gms-packages.html">
<span class="en">Reference</span>
</a>
<div>
</li>
</ul>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/billing/index.html" zh-cn-lang="应用内结算">
<span class="en">Google Play In-app Billing</span></a>
</div>
<ul>
<li><a href="/google/play/billing/billing_overview.html" zh-cn-lang="应用内结算概述">
<span class="en">Overview</span></a>
</li>
<li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/api.html" zh-cn-lang="应用内结算 API">
<span class="en">Version 3 API</span></a></div>
<ul>
<li><a href="/google/play/billing/billing_integrate.html">
<span class="en">Implementing the API</span></a></li>
<li><a href="/google/play/billing/billing_reference.html">
<span class="en">Reference</span></a></li>
</ul>
</li>
<li class="nav-section"><div class="nav-section-header"><a href="/google/play/billing/v2/api.html">
<span class="en">Version 2 API</span></a></div>
<ul>
<li><a href="/google/play/billing/v2/billing_integrate.html">
<span class="en">Implementing the API</span></a></li>
<li><a href="/google/play/billing/v2/billing_subscriptions.html">
<span class="en">Subscriptions</span></a></li>
<li><a href="/google/play/billing/v2/billing_reference.html">
<span class="en">Reference</span></a></li>
</ul>
</li>
<li><a href="/google/play/billing/billing_subscriptions.html">
<span class="en">Subscriptions</span></a>
</li>
<li><a href="/google/play/billing/billing_best_practices.html" zh-cn-lang="安全性和设计">
<span class="en">Security and Design</span></a>
</li>
<li><a href="/google/play/billing/billing_testing.html" zh-cn-lang="测试应用内结算">
<span class="en">Testing In-app Billing</span></a>
</li>
<li><a href="/google/play/billing/billing_admin.html" zh-cn-lang="管理应用内结算">
<span class="en">Administering In-app Billing</span></a>
</li>
<li><a href="/google/play/billing/versions.html">
<span class="en">Version Notes</span></a>
</li>
</ul>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/gcm/index.html">
<span class="en">Google Cloud Messaging</span></a>
</div>
<ul>
<li><a href="/google/gcm/gcm.html">
<span class="en">Overview</span></a>
</li>
<li><a href="/google/gcm/gs.html">
<span class="en">Getting Started</span></a>
</li>
<li><a href="/google/gcm/client.html">
<span class="en">Implementing GCM Client</span></a>
</li>
<li class="nav-section"><div class="nav-section-header"><a href="/google/gcm/server.html">
<span class="en">Implementing GCM Server</span></a></div>
<ul>
<li><a href="/google/gcm/ccs.html">
<span class="en">CCS (XMPP)</span></a></li>
<li><a href="/google/gcm/http.html">
<span class="en">HTTP</span></a></li>
</ul>
</li>
<li><a href="/google/gcm/server-ref.html">
<span class="en">Server Reference</span></a>
</li>
<li><a href="/google/gcm/notifications.html">
<span class="en">User Notifications</span></a>
</li>
<li><a href="/google/gcm/c2dm.html">
<span class="en">Migration</span></a>
</li>
</ul>
</li>
<li class="nav-section">
<div class="nav-section-header empty"><a href="/google/gcs/index.html">
<span class="en">Google Cloud Save</span></a>
</div>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/dist.html">
<span class="en">Google Play Distribution</span></a>
</div>
<ul>
<li><a href="/google/play/filters.html">
<span class="en">Filters on Google Play</span></a>
</li>
<li><a href="/google/play/billing/gp-purchase-status-api.html">
<span class="en">Google Play Developer API</span></a>
</li>
<li><a href="/google/play/publishing/multiple-apks.html">
<span class="en">Multiple APK Support</span></a>
</li>
<li><a href="/google/play/expansion-files.html">
<span class="en">APK Expansion Files</span></a>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/play/licensing/index.html">
<span class="en">Application Licensing</span></a>
</div>
<ul>
<li><a href="/google/play/licensing/overview.html">
<span class="en">Licensing Overview</span></a>
</li>
<li><a href="/google/play/licensing/setting-up.html">
<span class="en">Setting Up for Licensing</span></a>
</li>
<li><a href="/google/play/licensing/adding-licensing.html">
<span class="en">Adding Licensing to Your App</span></a>
</li>
<li><a href="/google/play/licensing/licensing-reference.html">
<span class="en">Licensing Reference</span></a>
</li>
</ul>
</li>
<li class="nav-section">
<div class="nav-section-header"><a href="/google/backup/index.html">
Android Backup Service</a>
</div>
<ul>
<li><a href="/google/backup/signup.html">
Register</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<script type="text/javascript">
<!--
buildToggleLists();
changeNavLang(getLangPref());
//-->
</script>
</div>
<script type="text/javascript">
showGoogleRefTree();
</script>
</div> <!-- end side-nav -->
<script>
$(document).ready(function() {
scrollIntoView("devdoc-nav");
});
</script>
<div class="col-12" id="doc-col">
<div id="api-info-block">
<div class="sum-details-links">
Summary:
<a href="#constants">Constants</a>
&#124; <a href="#pubmethods">Methods</a>
&#124; <a href="#inhmethods">Inherited Methods</a>
&#124; <a href="#" onclick="return toggleAllClassInherited()" id="toggleAllClassInherited">[Expand All]</a>
</div><!-- end sum-details-links -->
<div class="api-level">
</div>
</div><!-- end api-info-block -->
<!-- ======== START OF CLASS DATA ======== -->
<div id="jd-header">
public
final
class
<h1 itemprop="name">GoogleAuthUtil</h1>
extends Object<br/>
</div><!-- end header -->
<div id="naMessage"></div>
<div id="jd-content" class="api apilevel-">
<table class="jd-inheritance-table">
<tr>
<td colspan="2" class="jd-inheritance-class-cell">java.lang.Object</td>
</tr>
<tr>
<td class="jd-inheritance-space">&nbsp;&nbsp;&nbsp;&#x21b3;</td>
<td colspan="1" class="jd-inheritance-class-cell">com.google.android.gms.auth.GoogleAuthUtil</td>
</tr>
</table>
<div class="jd-descr">
<h2>Class Overview</h2>
<p itemprop="articleBody">GoogleAuthUtil provides static utility methods to acquire and invalidate
authentication tokens.
<pre>
public void onCreate {
// onCreate is called on the main thread, so you must do the work in
// a background thread, which AsyncTask makes easy to do.
getAndUseAuthTokenInAsyncTask();
}
...
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == MY_ACTIVITYS_AUTH_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
getAndUseAuthTokenInAsyncTask();
}
}
}
// Example of how to use the GoogleAuthUtil in a blocking, non-main thread context
void getAndUseAuthTokenBlocking() {
try {
// Retrieve a token for the given account and scope. It will always return either
// a non-empty String or throw an exception.
final String token = GoogleAuthUtil.getToken(context, email, scope);
// Do work with token.
...
if (server indicates token is invalid) {
// invalidate the token that we found is bad so that <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html">GoogleAuthUtil</a></code> won't
// return it next time (it may have cached it)
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html">GoogleAuthUtil</a></code>.<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#invalidateToken(android.content.Context, java.lang.String)">invalidateToken(Context, String)</a></code>(context, token);
// consider retrying getAndUseTokenBlocking() once more
return;
}
return;
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog alert = GooglePlayServicesUtil.getErrorDialog(
playEx.getConnectionStatusCode(),
this,
MY_ACTIVITYS_AUTH_REQUEST_CODE);
...
} catch (UserRecoverableAuthException userAuthEx) {
// Start the user recoverable action using the intent returned by
// <code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html#getIntent()">getIntent()</a></code>
myActivity.startActivityForResult(
userAuthEx.getIntent(),
MY_ACTIVITYS_AUTH_REQUEST_CODE);
return;
} catch (IOException transientEx) {
// network or server error, the call is expected to succeed if you try again later.
// Don't attempt to call again immediately - the request is likely to
// fail, you'll hit quotas or back-off.
...
return;
} catch (GoogleAuthException authEx) {
// Failure. The call is not expected to ever succeed so it should not be
// retried.
...
return;
}
}
// Example of how to use AsyncTask to call blocking code on a background thread.
void getAndUseAuthTokenInAsyncTask() {
AsyncTask<Void, Void, Void> task = new AsyncTask<Void, Void, Void>() {
&#64Override
protected Void doInBackground(Void... params) {
getAndUseAuthTokenBlocking();
}
};
task.execute((Void)null);
}
</pre>
</p>
</div><!-- jd-descr -->
<div class="jd-descr">
<h2>Summary</h2>
<!-- =========== ENUM CONSTANT SUMMARY =========== -->
<table id="constants" class="jd-sumtable"><tr><th colspan="12">Constants</th></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol">int</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#CHANGE_TYPE_ACCOUNT_ADDED">CHANGE_TYPE_ACCOUNT_ADDED</a></td>
<td class="jd-descrcol" width="100%">
Change types that can be represented in an <code><a href="/reference/com/google/android/gms/auth/AccountChangeEvent.html">AccountChangeEvent</a></code>.
</td>
</tr>
<tr class=" api apilevel-" >
<td class="jd-typecol">int</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#CHANGE_TYPE_ACCOUNT_REMOVED">CHANGE_TYPE_ACCOUNT_REMOVED</a></td>
<td class="jd-descrcol" width="100%">
</td>
</tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol">int</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#CHANGE_TYPE_ACCOUNT_RENAMED_FROM">CHANGE_TYPE_ACCOUNT_RENAMED_FROM</a></td>
<td class="jd-descrcol" width="100%">
A rename event that will contain extra data indicating the original account name.
</td>
</tr>
<tr class=" api apilevel-" >
<td class="jd-typecol">int</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#CHANGE_TYPE_ACCOUNT_RENAMED_TO">CHANGE_TYPE_ACCOUNT_RENAMED_TO</a></td>
<td class="jd-descrcol" width="100%">
A rename event that will contain extra data indicating the new account name.
</td>
</tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol">String</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#GOOGLE_ACCOUNT_TYPE">GOOGLE_ACCOUNT_TYPE</a></td>
<td class="jd-descrcol" width="100%">
Google Account type string.
</td>
</tr>
<tr class=" api apilevel-" >
<td class="jd-typecol">String</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_REQUEST_ACTIONS">KEY_REQUEST_ACTIONS</a></td>
<td class="jd-descrcol" width="100%">
Bundle key for specifying which user's app activity (moment) types can
be written to Google.
</td>
</tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol">String</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_REQUEST_VISIBLE_ACTIVITIES">KEY_REQUEST_VISIBLE_ACTIVITIES</a></td>
<td class="jd-descrcol" width="100%">
See <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_REQUEST_ACTIONS">KEY_REQUEST_ACTIONS</a></code>
</td>
</tr>
<tr class=" api apilevel-" >
<td class="jd-typecol">String</td>
<td class="jd-linkcol"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_SUPPRESS_PROGRESS_SCREEN">KEY_SUPPRESS_PROGRESS_SCREEN</a></td>
<td class="jd-descrcol" width="100%">
Adding KEY_SUPPRESS_PROGRESS will suppress the progress screen shown
when getting a token when added as a boolean <code>true</code> option while
calling <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken(Context, String, String, Bundle)</a></code>.
</td>
</tr>
</table>
<!-- ========== METHOD SUMMARY =========== -->
<table id="pubmethods" class="jd-sumtable"><tr><th colspan="12">Public Methods</th></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#clearToken(android.content.Context, java.lang.String)">clearToken</a></span>(Context context, String token)</nobr>
<div class="jd-descrdiv">
Clear the specified token in local cache with respect to the <code><a href="/reference/android/content/Context.html">Context</a></code>.
</div>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
List&lt;<a href="/reference/com/google/android/gms/auth/AccountChangeEvent.html">AccountChangeEvent</a>&gt;</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getAccountChangeEvents(android.content.Context, int, java.lang.String)">getAccountChangeEvents</a></span>(Context ctx, int eventIndex, String accountName)</nobr>
<div class="jd-descrdiv">
Get a list of events for the given account.
</div>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getAccountId(android.content.Context, java.lang.String)">getAccountId</a></span>(Context ctx, String accountName)</nobr>
<div class="jd-descrdiv">
Gets a stable account id for the given account name.
</div>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String)">getToken</a></span>(Context context, String accountName, String scope)</nobr>
<div class="jd-descrdiv">
<em>
This method is deprecated.
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String)">getToken(Context, Account, String)</a></code> instead.
</em>
</div>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)">getToken</a></span>(Context context, Account account, String scope, Bundle extras)</nobr>
<div class="jd-descrdiv">
Gets a token to be consumed by some specified services on behalf of a
specified user account.
</div>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken</a></span>(Context context, String accountName, String scope, Bundle extras)</nobr>
<div class="jd-descrdiv">
<em>
This method is deprecated.
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)">getToken(Context, Account, String, Bundle)</a></code> instead.
</em>
</div>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String)">getToken</a></span>(Context context, Account account, String scope)</nobr>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle, android.content.Intent)">getTokenWithNotification</a></span>(Context context, String accountName, String scope, Bundle extras, Intent callback)</nobr>
<div class="jd-descrdiv">
<em>
This method is deprecated.
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, android.content.Intent)">getTokenWithNotification(Context, Account, String, Bundle, Intent)</a></code>
instead.
</em>
</div>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle, java.lang.String, android.os.Bundle)">getTokenWithNotification</a></span>(Context context, String accountName, String scope, Bundle extras, String authority, Bundle syncBundle)</nobr>
<div class="jd-descrdiv">
<em>
This method is deprecated.
Use
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, java.lang.String, android.os.Bundle)">getTokenWithNotification(Context, Account, String, Bundle, String, Bundle)</a></code>
instead.
</em>
</div>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, java.lang.String, android.os.Bundle)">getTokenWithNotification</a></span>(Context context, Account account, String scope, Bundle extras, String authority, Bundle syncBundle)</nobr>
<div class="jd-descrdiv">
Authenticates the user and returns a valid Google authentication token, or throws an
<code><a href="/reference/java/lang/Exception.html">Exception</a></code> if there was an error while getting the token.
</div>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getTokenWithNotification</a></span>(Context context, String accountName, String scope, Bundle extras)</nobr>
<div class="jd-descrdiv">
<em>
This method is deprecated.
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)">getTokenWithNotification(Context, Account, String, Bundle)</a></code> instead.
</em>
</div>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)">getTokenWithNotification</a></span>(Context context, Account account, String scope, Bundle extras)</nobr>
<div class="jd-descrdiv">
Authenticates the user and returns a valid Google authentication token, or throws an
<code><a href="/reference/java/lang/Exception.html">Exception</a></code> if there was an error while getting the token.
</div>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
static
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, android.content.Intent)">getTokenWithNotification</a></span>(Context context, Account account, String scope, Bundle extras, Intent callback)</nobr>
<div class="jd-descrdiv">
Authenticates the user and returns a valid Google authentication token, or throws an
<code><a href="/reference/java/lang/Exception.html">Exception</a></code> if there was an error while getting the token.
</div>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
static
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad"><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#invalidateToken(android.content.Context, java.lang.String)">invalidateToken</a></span>(Context context, String token)</nobr>
<div class="jd-descrdiv">
<em>
This method is deprecated.
Deprecated because this function needs permissions
MANAGE_ACCOUNTS and USE_CREDENTIALS to run. Please call
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#clearToken(android.content.Context, java.lang.String)">clearToken(Context, String)</a></code> instead.
</em>
</div>
</td></tr>
</table>
<!-- ========== METHOD SUMMARY =========== -->
<table id="inhmethods" class="jd-sumtable"><tr><th>
<a href="#" class="toggle-all" onclick="return toggleAllInherited(this, null)">[Expand]</a>
<div style="clear:left;">Inherited Methods</div></th></tr>
<tr class="api apilevel-" >
<td colspan="12">
<a href="#" onclick="return toggleInherited(this, null)" id="inherited-methods-java.lang.Object" class="jd-expando-trigger closed"
><img id="inherited-methods-java.lang.Object-trigger"
src="/assets/images/triangle-closed.png"
class="jd-expando-trigger-img" /></a>
From class
java.lang.Object
<div id="inherited-methods-java.lang.Object">
<div id="inherited-methods-java.lang.Object-list"
class="jd-inheritedlinks">
</div>
<div id="inherited-methods-java.lang.Object-summary" style="display: none;">
<table class="jd-sumtable-expando">
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
Object</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">clone</span>()</nobr>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
boolean</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">equals</span>(Object arg0)</nobr>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">finalize</span>()</nobr>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
final
Class&lt;?&gt;</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">getClass</span>()</nobr>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
int</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">hashCode</span>()</nobr>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
final
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">notify</span>()</nobr>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
final
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">notifyAll</span>()</nobr>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
String</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">toString</span>()</nobr>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
final
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">wait</span>()</nobr>
</td></tr>
<tr class=" api apilevel-" >
<td class="jd-typecol"><nobr>
final
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">wait</span>(long arg0, int arg1)</nobr>
</td></tr>
<tr class="alt-color api apilevel-" >
<td class="jd-typecol"><nobr>
final
void</nobr>
</td>
<td class="jd-linkcol" width="100%"><nobr>
<span class="sympad">wait</span>(long arg0)</nobr>
</td></tr>
</table>
</div>
</div>
</td></tr>
</table>
</div><!-- jd-descr (summary) -->
<!-- Details -->
<!-- XML Attributes -->
<!-- Enum Values -->
<!-- Constants -->
<!-- ========= ENUM CONSTANTS DETAIL ======== -->
<h2>Constants</h2>
<A NAME="CHANGE_TYPE_ACCOUNT_ADDED"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
int
</span>
CHANGE_TYPE_ACCOUNT_ADDED
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Change types that can be represented in an <code><a href="/reference/com/google/android/gms/auth/AccountChangeEvent.html">AccountChangeEvent</a></code>.
</p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
1
(0x00000001)
</span>
</div>
</div>
</div>
<A NAME="CHANGE_TYPE_ACCOUNT_REMOVED"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
int
</span>
CHANGE_TYPE_ACCOUNT_REMOVED
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p></p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
2
(0x00000002)
</span>
</div>
</div>
</div>
<A NAME="CHANGE_TYPE_ACCOUNT_RENAMED_FROM"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
int
</span>
CHANGE_TYPE_ACCOUNT_RENAMED_FROM
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>A rename event that will contain extra data indicating the original account name. </p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
3
(0x00000003)
</span>
</div>
</div>
</div>
<A NAME="CHANGE_TYPE_ACCOUNT_RENAMED_TO"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
int
</span>
CHANGE_TYPE_ACCOUNT_RENAMED_TO
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>A rename event that will contain extra data indicating the new account name. </p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
4
(0x00000004)
</span>
</div>
</div>
</div>
<A NAME="GOOGLE_ACCOUNT_TYPE"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
String
</span>
GOOGLE_ACCOUNT_TYPE
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Google Account type string. Used for various calls to <code><a href="/reference/android/accounts/AccountManager.html">AccountManager</a></code>.
</p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
"com.google"
</span>
</div>
</div>
</div>
<A NAME="KEY_REQUEST_ACTIONS"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
String
</span>
KEY_REQUEST_ACTIONS
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Bundle key for specifying which user's app activity (moment) types can
be written to Google. The list of activity types are represented as a
space-separated string passed in the extras Bundle when calling <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken(Context, String, String, Bundle)</a></code>.
<p>
This bundle key should be included in the extras Bundle when calling
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken(Context, String, String, Bundle)</a></code> and
should only be used when requesting the <code><a href="/reference/com/google/android/gms/common/Scopes.html#PLUS_LOGIN">PLUS_LOGIN</a></code> OAuth 2.0 scope.
See <a href="https://developers.google.com/+/api/moment-types">Types of
moments</a> for the full list of valid activity types. Example usage:
<pre>
Bundle bundle = new Bundle();
bundle.putString(GoogleAuthUtil.KEY_REQUEST_ACTIONS,
"http://schemas.google.com/AddActivity http://schemas.google.com/BuyActivity");
String token = GoogleAuthUtil.getToken(context, account, Scopes.PLUS_LOGIN, bundle);
</pre>
</p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
"request_visible_actions"
</span>
</div>
</div>
</div>
<A NAME="KEY_REQUEST_VISIBLE_ACTIVITIES"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
String
</span>
KEY_REQUEST_VISIBLE_ACTIVITIES
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>See <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_REQUEST_ACTIONS">KEY_REQUEST_ACTIONS</a></code>
</p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
"request_visible_actions"
</span>
</div>
</div>
</div>
<A NAME="KEY_SUPPRESS_PROGRESS_SCREEN"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
final
String
</span>
KEY_SUPPRESS_PROGRESS_SCREEN
</h4>
<div class="api-level">
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Adding KEY_SUPPRESS_PROGRESS will suppress the progress screen shown
when getting a token when added as a boolean <code>true</code> option while
calling <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken(Context, String, String, Bundle)</a></code>. This is
useful for apps that provide their own splash screens on initialization.
</p></div>
<div class="jd-tagdata">
<span class="jd-tagtitle">Constant Value: </span>
<span>
"suppressProgressScreen"
</span>
</div>
</div>
</div>
<!-- Fields -->
<!-- Public ctors -->
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<!-- Protected ctors -->
<!-- ========= METHOD DETAIL ======== -->
<!-- Public methdos -->
<h2>Public Methods</h2>
<A NAME="clearToken(android.content.Context, java.lang.String)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
void
</span>
<span class="sympad">clearToken</span>
<span class="normal">(Context context, String token)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Clear the specified token in local cache with respect to the <code><a href="/reference/android/content/Context.html">Context</a></code>.
Note that the context must be the same as that used to initialize
the token in a previous call to
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String)">getToken(Context, String, String)</a></code> or
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken(Context, String, String, Bundle)</a></code>.</p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>context</td>
<td>Context of the token.</td>
</tr>
<tr>
<th>token</td>
<td>The token to clear.
</td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html">GooglePlayServicesAvailabilityException</a></td>
<td></td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td></td>
</tr>
<tr>
<th>IOException</td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getAccountChangeEvents(android.content.Context, int, java.lang.String)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
List&lt;<a href="/reference/com/google/android/gms/auth/AccountChangeEvent.html">AccountChangeEvent</a>&gt;
</span>
<span class="sympad">getAccountChangeEvents</span>
<span class="normal">(Context ctx, int eventIndex, String accountName)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Get a list of events for the given account. The result is in reverse chronological order.</p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>eventIndex</td>
<td>An event index to restrict results by. If <code>0</code> then all events will
be fetched. Otherwise, events greater than this index will be fetched. Callers can
store the last event index seen and use this field to limit results to only events
more recent than the ones seen prior.</td>
</tr>
<tr>
<th>accountName</td>
<td>The account name to restrict the event list to.
</td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td></td>
</tr>
<tr>
<th>IOException</td>
<td></td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getAccountId(android.content.Context, java.lang.String)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getAccountId</span>
<span class="normal">(Context ctx, String accountName)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Gets a stable account id for the given account name.
In the event of a missing id, user intervention may be required. In such
cases, a <code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></code> will be thrown.
To initiate the user recovery workflow, clients must start the
<code><a href="/reference/android/content/Intent.html">Intent</a></code> returned by
<code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html#getIntent()">getIntent()</a></code> for result. Upon
successfully returning a client should invoke this method again to get
an id.</p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html">GooglePlayServicesAvailabilityException</a></td>
<td>containing the appropriate
connection status error code.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></td>
<td>wrapping an Intent for initiating
user intervention. The wrapped intent must be called with <code><a href="/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int)">startActivityForResult(Intent, int)</a></code>.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td>signaling a potentially unrecoverable
authentication error.</td>
</tr>
<tr>
<th>IOException</td>
<td>signaling a potentially transient error.</td>
</tr>
<tr>
<th>IllegalStateException</td>
<td>if the method is invoked in the main
event thread.
</td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getToken(android.content.Context, java.lang.String, java.lang.String)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getToken</span>
<span class="normal">(Context context, String accountName, String scope)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<p>
<p class="caution"><strong>
This method is deprecated.</strong><br/>
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String)">getToken(Context, Account, String)</a></code> instead.
</p>
<div class="jd-tagdata jd-tagdescr"><p></p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th>IOException</td>
<td></td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></td>
<td></td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td></td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">See Also</h5>
<ul class="nolist"><li><code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)">getToken(Context, String, String, Bundle)</a></code></li>
</ul>
</div>
</div>
</div>
<A NAME="getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getToken</span>
<span class="normal">(Context context, Account account, String scope, Bundle extras)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Gets a token to be consumed by some specified services on behalf of a
specified user account. How the token is consumed depends
on the scope string provided. Note that this method requires substantial
network IO and thus should be run off the UI thread. In the event of an
error, one of several <code><a href="/reference/java/lang/Exception.html">Exception</a></code>s will be thrown.
<p>
In the case of a transient (typically network related) error a
<code><a href="/reference/java/io/IOException.html">IOException</a></code> will be thrown. It is left to clients to implement
a backoff/abandonment strategy appropriate to their latency
requirements. If user intervention is required to provide consent, enter
a password, etc, a <code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></code> will be thrown.
To initiate the user recovery workflow, clients must start the
<code><a href="/reference/android/content/Intent.html">Intent</a></code> returned by
<code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html#getIntent()">getIntent()</a></code> for result. Upon
successfully returning a client should invoke this method again to get
a token. In the cases of errors that are neither transient nor
recoverable by the the user, a <code><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></code> will be
thrown. These errors will typically result from client errors (e.g.
providing an invalid scope).
<p>
By way of example, client code might have a block of code executing in a
locally declared implementation of <code><a href="/reference/java/lang/Thread.html">Thread</a></code> or
<code><a href="/reference/android/os/AsyncTask.html">AsyncTask</a></code> as follows:
<pre>
String token = null;
try {
token = GoogleAuthUtil.getToken(context, account, scope, bundle);
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
playEx.getConnectionStatusCode(),
Activity.this,
AUTH_REQUEST_CODE);
// Use the dialog to present to the user.
} catch (UserRecoverableAuthException recoverableException) {
Intent recoveryIntent = recoverableException.getIntent();
// Use the intent in a custom dialog or just startActivityForResult.
Activity.this.startActivityForResult(recoveryIntent, REQUEST_CODE);
} catch (GoogleAuthException authEx) {
// This is likely unrecoverable.
Log.e(TAG, "Unrecoverable authentication exception: " + authEx.getMessage(), authEx);
return;
} catch (IOException ioEx) {
Log.i(TAG, "transient error encountered: " + ioEx.getMessage());
doExponentialBackoff();
return;
}
if (token != null) {
makeNetworkApiCallwithToken(token);
}
</pre>
<p>
Those clients that have their own splash screens may wish to suppress
the progress screen provided by Google Play services. The
"Signing in..." progress screen provided by Google Play services by
including setting <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_SUPPRESS_PROGRESS_SCREEN">KEY_SUPPRESS_PROGRESS_SCREEN</a></code> to true
in the supplied options <code><a href="/reference/android/os/Bundle.html">Bundle</a></code>.</p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>context</td>
<td>Context associated with the desired token.</td>
</tr>
<tr>
<th>account</td>
<td>Authenticating user account.</td>
</tr>
<tr>
<th>scope</td>
<td>String representing the authentication scope. To specify
multiple scopes, separate them with a space (for example,
"oauth2:scope1 scope2 scope3").</td>
</tr>
<tr>
<th>extras</td>
<td>Bundle containing additional information that may be
relevant to the authentication scope.</td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Returns</h5>
<ul class="nolist"><li>String containing a valid token.</li></ul>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html">GooglePlayServicesAvailabilityException</a></td>
<td>containing the appropriate
connection status error code.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></td>
<td>wrapping an Intent for initiating
user intervention. The wrapped intent must be called with <code><a href="/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int)">startActivityForResult(Intent, int)</a></code>.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td>signaling a potentially unrecoverable
authentication error.</td>
</tr>
<tr>
<th>IOException</td>
<td>signaling a potentially transient error.</td>
</tr>
<tr>
<th>IllegalStateException</td>
<td>if the method is invoked in the main
event thread.
</td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getToken(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getToken</span>
<span class="normal">(Context context, String accountName, String scope, Bundle extras)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<p>
<p class="caution"><strong>
This method is deprecated.</strong><br/>
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)">getToken(Context, Account, String, Bundle)</a></code> instead.
</p>
<div class="jd-tagdata jd-tagdescr"><p>Gets a token to be consumed by some specified services on behalf of a
specified user account. How the token is consumed depends
on the scope string provided. Note that this method requires substantial
network IO and thus should be run off the UI thread. In the event of an
error, one of several <code><a href="/reference/java/lang/Exception.html">Exception</a></code>s will be thrown.
<p>
In the case of a transient (typically network related) error a
<code><a href="/reference/java/io/IOException.html">IOException</a></code> will be thrown. It is left to clients to implement
a backoff/abandonment strategy appropriate to their latency
requirements. If user intervention is required to provide consent, enter
a password, etc, a <code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></code> will be thrown.
To initiate the user recovery workflow, clients must start the
<code><a href="/reference/android/content/Intent.html">Intent</a></code> returned by
<code><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html#getIntent()">getIntent()</a></code> for result. Upon
successfully returning a client should invoke this method again to get
a token. In the cases of errors that are neither transient nor
recoverable by the the user, a <code><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></code> will be
thrown. These errors will typically result from client errors (e.g.
providing an invalid scope).
<p>
By way of example, client code might have a block of code executing in a
locally declared implementation of <code><a href="/reference/java/lang/Thread.html">Thread</a></code> or
<code><a href="/reference/android/os/AsyncTask.html">AsyncTask</a></code> as follows:
<pre>
String token = null;
try {
token = GoogleAuthUtil.getToken(context, accountName, scope, bundle);
} catch (GooglePlayServicesAvailabilityException playEx) {
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
playEx.getConnectionStatusCode(),
Activity.this,
AUTH_REQUEST_CODE);
// Use the dialog to present to the user.
} catch (UserRecoverableAuthException recoverableException) {
Intent recoveryIntent = recoverableException.getIntent();
// Use the intent in a custom dialog or just startActivityForResult.
Activity.this.startActivityForResult(recoveryIntent, REQUEST_CODE);
} catch (GoogleAuthException authEx) {
// This is likely unrecoverable.
Log.e(TAG, "Unrecoverable authentication exception: " + authEx.getMessage(), authEx);
return;
} catch (IOException ioEx) {
Log.i(TAG, "transient error encountered: " + ioEx.getMessage());
doExponentialBackoff();
return;
}
if (token != null) {
makeNetworkApiCallwithToken(token);
}
</pre>
<p>
Those clients that have their own splash screens may wish to suppress
the progress screen provided by Google Play services. The
"Signing in..." progress screen provided by Google Play services by
including setting <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#KEY_SUPPRESS_PROGRESS_SCREEN">KEY_SUPPRESS_PROGRESS_SCREEN</a></code> to true
in the supplied options <code><a href="/reference/android/os/Bundle.html">Bundle</a></code>.</p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>context</td>
<td>Context associated with the desired token.</td>
</tr>
<tr>
<th>accountName</td>
<td>String representing the authenticating user account.</td>
</tr>
<tr>
<th>scope</td>
<td>String representing the authentication scope. To specify
multiple scopes, separate them with a space (for example,
"oauth2:scope1 scope2 scope3").</td>
</tr>
<tr>
<th>extras</td>
<td>Bundle containing additional information that may be
relevant to the authentication scope.</td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Returns</h5>
<ul class="nolist"><li>String containing a valid token.</li></ul>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html">GooglePlayServicesAvailabilityException</a></td>
<td>containing the appropriate
connection status error code.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></td>
<td>wrapping an Intent for initiating
user intervention. The wrapped intent must be called with <code><a href="/reference/android/app/Activity.html#startActivityForResult(android.content.Intent, int)">startActivityForResult(Intent, int)</a></code>.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td>signaling a potentially unrecoverable
authentication error.</td>
</tr>
<tr>
<th>IOException</td>
<td>signaling a potentially transient error.</td>
</tr>
<tr>
<th>IllegalStateException</td>
<td>if the method is invoked in the main
event thread.</td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getToken(android.content.Context, android.accounts.Account, java.lang.String)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getToken</span>
<span class="normal">(Context context, Account account, String scope)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p></p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th>IOException</td>
<td></td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableAuthException.html">UserRecoverableAuthException</a></td>
<td></td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td></td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">See Also</h5>
<ul class="nolist"><li><code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle)">getToken(Context, Account, String, Bundle)</a></code></li>
</ul>
</div>
</div>
</div>
<A NAME="getTokenWithNotification(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle, android.content.Intent)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getTokenWithNotification</span>
<span class="normal">(Context context, String accountName, String scope, Bundle extras, Intent callback)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<p>
<p class="caution"><strong>
This method is deprecated.</strong><br/>
Use <code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, android.content.Intent)">getTokenWithNotification(Context, Account, String, Bundle, Intent)</a></code>
instead.
</p>
<div class="jd-tagdata jd-tagdescr"><p>Authenticates the user and returns a valid Google authentication token, or throws an
<code><a href="/reference/java/lang/Exception.html">Exception</a></code> if there was an error while getting the token.
<p>
This method is specifically provided for background tasks. In the event of an error that
needs user intervention, this method takes care of pushing relevant notification. After the
user addresses the notification, the callback is broadcasted. If the user cancels then the
callback is not fired.
<p>
The exception thrown depends upon the underlying error and support for
recovery. <code><a href="/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html">UserRecoverableNotifiedException</a></code> will be thrown if the error can be
resolved by user intervention and a notification has already been posted to address it.
<code><a href="/reference/java/io/IOException.html">IOException</a></code>s will be thrown if the underlying error
might be solved by some intelligent retry strategy. Alternatively,
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></code>s represent a broad class of
<code><a href="/reference/java/lang/Exception.html">Exception</a></code>s that cannot be recovered programmatically.
<pre>
String token;
try {
token = GoogleAuthUtil.getTokenWithNotification(
context, accountName, scope, extras, callback);
} catch (UserRecoverableNotifiedException userNotifiedException) {
// Notification has already been pushed.
// Continue without token or stop background task.
} catch (GoogleAuthException authEx) {
// This is likely unrecoverable.
Log.e(TAG, "Unrecoverable authentication exception: " + authEx.getMessage(), authEx);
} catch (IOException ioEx) {
Log.i(TAG, "transient error encountered: " + ioEx.getMessage());
doExponentialBackoff();
}
</pre></p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>context</td>
<td>Context associated with the desired token.</td>
</tr>
<tr>
<th>accountName</td>
<td>String representing the authenticating user account.</td>
</tr>
<tr>
<th>scope</td>
<td>String representing the authentication scope. To specify multiple scopes,
separate them with a space (for example, "oauth2:scope1 scope2 scope3").</td>
</tr>
<tr>
<th>extras</td>
<td>Bundle containing additional information that may be
relevant to the authentication scope.</td>
</tr>
<tr>
<th>callback</td>
<td>A broadcast intent with a valid receiver that has been exported for other
apps to send broadcasts to it. This intent must be serializable using
toUri(Intent.URI_INTENT_SCHEME) and Intent.parseUri(intentUri, Intent.URI_INTENT_SCHEME).
Cannot be null.</td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Returns</h5>
<ul class="nolist"><li>String containing a valid token.</li></ul>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html">UserRecoverableNotifiedException</a></td>
<td>if a user addressable error occurred and a
notification was pushed.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td>signaling a potentially unrecoverable
authentication error.</td>
</tr>
<tr>
<th>IOException</td>
<td>signaling a potentially transient error.</td>
</tr>
<tr>
<th>IllegalStateException</td>
<td>if the method is invoked in the main
event thread.</td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getTokenWithNotification(android.content.Context, java.lang.String, java.lang.String, android.os.Bundle, java.lang.String, android.os.Bundle)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getTokenWithNotification</span>
<span class="normal">(Context context, String accountName, String scope, Bundle extras, String authority, Bundle syncBundle)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<p>
<p class="caution"><strong>
This method is deprecated.</strong><br/>
Use
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, java.lang.String, android.os.Bundle)">getTokenWithNotification(Context, Account, String, Bundle, String, Bundle)</a></code>
instead.
</p>
<div class="jd-tagdata jd-tagdescr"><p>Authenticates the user and returns a valid Google authentication token, or throws an
<code><a href="/reference/java/lang/Exception.html">Exception</a></code> if there was an error while getting the token.
<p>
This method is specifically provided for sync adaptors. In the event of an error that
needs user intervention, this method takes care of pushing relevant notification. After the
user addresses the notification, a sync request will be kicked off using the given params.
If the user cancels then the sync is not fired.
<p>
The exception thrown depends upon the underlying error and support for
recovery. <code><a href="/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html">UserRecoverableNotifiedException</a></code> will be thrown if the error can be
resolved by user intervention and a notification has already been posted to address it.
<code><a href="/reference/java/io/IOException.html">IOException</a></code>s will be thrown if the underlying error
might be solved by some intelligent retry strategy. Alternatively,
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></code>s represent a broad class of
<code><a href="/reference/java/lang/Exception.html">Exception</a></code>s that cannot be recovered programmatically.
<pre>
String token;
try {
token = GoogleAuthUtil.getTokenWithNotification(
context, accountName, scope, extras, authority, syncBundle);
} catch (UserRecoverableNotifiedException userNotifiedException) {
// Notification has already been pushed.
// Continue without token or stop background task.
} catch (GoogleAuthException authEx) {
// This is likely unrecoverable.
Log.e(TAG, "Unrecoverable authentication exception: " + authEx.getMessage(), authEx);
} catch (IOException ioEx) {
Log.i(TAG, "transient error encountered: " + ioEx.getMessage());
doExponentialBackoff();
}
</pre></p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>context</td>
<td>Context associated with the desired token.</td>
</tr>
<tr>
<th>accountName</td>
<td>String representing the authenticating user account.</td>
</tr>
<tr>
<th>scope</td>
<td>String representing the authentication scope. To specify multiple scopes,
separate them with a space (for example, "oauth2:scope1 scope2 scope3").</td>
</tr>
<tr>
<th>extras</td>
<td>Bundle containing additional information that may be
relevant to the authentication scope.</td>
</tr>
<tr>
<th>authority</td>
<td>Authority for firing a sync request. Must not be empty or null.</td>
</tr>
<tr>
<th>syncBundle</td>
<td>extras for firing a sync request. This bundle must pass
ContentResolver.validateSyncExtrasBundle(). If no extras are needed can a null value
can be passed.</td>
</tr>
</table>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Returns</h5>
<ul class="nolist"><li>String containing a valid token.</li></ul>
</div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Throws</h5>
<table class="jd-tagtable">
<tr>
<th><a href="/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html">UserRecoverableNotifiedException</a></td>
<td>if a user addressable error occurred and a
notification was pushed.</td>
</tr>
<tr>
<th><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></td>
<td>signaling a potentially unrecoverable
authentication error.</td>
</tr>
<tr>
<th>IOException</td>
<td>signaling a potentially transient error.</td>
</tr>
<tr>
<th>IllegalStateException</td>
<td>if the method is invoked in the main
event thread.</td>
</tr>
</table>
</div>
</div>
</div>
<A NAME="getTokenWithNotification(android.content.Context, android.accounts.Account, java.lang.String, android.os.Bundle, java.lang.String, android.os.Bundle)"></A>
<div class="jd-details api apilevel-">
<h4 class="jd-details-title">
<span class="normal">
public
static
String
</span>
<span class="sympad">getTokenWithNotification</span>
<span class="normal">(Context context, Account account, String scope, Bundle extras, String authority, Bundle syncBundle)</span>
</h4>
<div class="api-level">
<div></div>
</div>
<div class="jd-details-descr">
<div class="jd-tagdata jd-tagdescr"><p>Authenticates the user and returns a valid Google authentication token, or throws an
<code><a href="/reference/java/lang/Exception.html">Exception</a></code> if there was an error while getting the token.
<p>
This method is specifically provided for sync adaptors. In the event of an error that
needs user intervention, this method takes care of pushing relevant notification. After the
user addresses the notification, a sync request will be kicked off using the given params.
If the user cancels then the sync is not fired.
<p>
The exception thrown depends upon the underlying error and support for
recovery. <code><a href="/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html">UserRecoverableNotifiedException</a></code> will be thrown if the error can be
resolved by user intervention and a notification has already been posted to address it.
<code><a href="/reference/java/io/IOException.html">IOException</a></code>s will be thrown if the underlying error
might be solved by some intelligent retry strategy. Alternatively,
<code><a href="/reference/com/google/android/gms/auth/GoogleAuthException.html">GoogleAuthException</a></code>s represent a broad class of
<code><a href="/reference/java/lang/Exception.html">Exception</a></code>s that cannot be recovered programmatically.
<pre>
String token;
try {
token = GoogleAuthUtil.getTokenWithNotification(
context, account, scope, extras, authority, syncBundle);
} catch (UserRecoverableNotifiedException userNotifiedException) {
// Notification has already been pushed.
// Continue without token or stop background task.
} catch (GoogleAuthException authEx) {
// This is likely unrecoverable.
Log.e(TAG, "Unrecoverable authentication exception: " + authEx.getMessage(), authEx);
} catch (IOException ioEx) {
Log.i(TAG, "transient error encountered: " + ioEx.getMessage());
doExponentialBackoff();
}
</pre></p></div>
<div class="jd-tagdata">
<h5 class="jd-tagtitle">Parameters</h5>
<table class="jd-tagtable">
<tr>
<th>context</td>
<td>Context associated with the desired token.</td>
</tr>
<tr>
<th>account</td>
<td>Authenticating user account.</td>
</tr>