2016-08-14 3 views
0

私はAbstractAccountAuthenticatorのカスタム実装を使用しており、ドキュメントごとにgetAuthTokenを実装しています。私はこのチュートリアルに従っています:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/AbstractAccountAuthenticator getAuthTokenが呼び出されていない

私は、AbstractAccountAuthenticatorの実装にあるgetAuthTokenメソッドがいつ呼び出されるのかを理解していません。私はそれを実装したサービスでマニフェストを設定し、ログインページを作成してアカウントを追加したり、トークンを追加したり、AccountManagerクラスを使用してアクティビティのコードからトークンを取得したりできます。 AbstractAccountAuthenticatorコードが呼び出されます。

誰かが私がなぜそれが使用されていないように見えるときに私がautheniticatorを実装しなければならなかったのか理解してくれたら助かりますか?

答えて

0

あなたのアプリケーションとオーセンティケータの間にメディエーターがあり、AndroidのAccountManagerクラスですからです。

あなたのオーセンティケータは、実際にそれが関連付けられているアカウントタイプの「プラグイン」です。アプリケーションだけでなく、オーセンティケータが処理する特定のアカウントタイプの認証が必要な他のアプリケーションでも使用できます。

アプリのマニフェストにオーセンティケータを設定すると、そのオーセンティケータはAccountManagerに登録されます。アプリが「com.google」アカウントタイプで認証された場合、AccountManagerはGoogleの事前登録済み認証ツールを使用します。アカウントタイプが「com.yourapp.account」で認証されている場合は、代わりにAccountManagerが認証者を使用します。

あなたのアプリは、認証トークンをAccountManagerに要求し、それがターンアラウンドし、オーセンティケータに要求を転送します。

Udiniの記事を再読してください。コード例は、どのように一緒に収まるかを示しています。

+0

返事をいただきありがとうございます、それは私が思ったものですが、それはまだ私が期待していたように動作していないようです。それは私がブレークポイントを置くとき、それは決して打撃を受けないのはなぜですか?私がAccountManagers GetAuthTokenを使用したときに書いたコードを何とかバイパスしていますか? –

+0

'AccountManager'はあなたのオーセンティケーターをいつ使用する必要があるかを決めます。コードが呼び出されていない場合は、 'AccountManager'に既に有効であると考えられるトークンが既に存在している可能性があります。 'getAuthToken'をオーセンティケータで実行させようとするなら、まず' AccountManager'で 'invalidateAuthToken'を呼び出してみてください。 Udiniのブログには全体のやりとりを示す厄介なフローチャートがあります。 –

関連する問題