2011-08-15 19 views
12

アンドロイドAccountMangerを使用してウェブサービスとアプリケーション(連絡先とカレンダーの標準同期)を同期したいと考えていますが、AccountManagerはユーザー名とパスワードを保存するようにしか見えません。私のWebサービスは、ユーザー名、パスワード、アカウントの3つの資格情報を取ります。 3番目の情報を格納するベストプラクティスは何ですか? AndroidのドキュメントからAndroidアカウントマネージャーに追加データを保存

+0

申し訳ありませんが、愚かなものですが、UserNameとAccountをマージして、論理的な 'UserName'にすることはできませんか? –

答えて

25

p ablisco説明し、あなたがaddAccountExplicitly()さんのuserDataバンドルパラメータを使用して、任意のユーザーデータを格納するためのAccountManagerの機能を使用することができます後で

final Bundle extraData = new Bundle(); 
    extraData.putString("someKey", "stringData"); 
    boolean accountCreated = am.addAccountExplicitly(account, password, extraData); 

を、あなたのオーセンティケータのgetAuthToken()方法では、たとえば、あなたがしているアカウントに関連するデータを取得することができます作業:

String myData = am.getUserData(account, "someKey"); 

あなたが最初のバンドルをビルドするとき、あなたのデータが文字列として格納されなければならないので、残念ながらこれを書いている時点ではあなただけ、文字列を取得することができます。これが誰かを助けることを望みます。

+0

私は私のアプリのアカウントマネージャーを使用して見て、私は電子メールやuserIdsのようなものを格納する必要があります。上記の方法を使用しても安全ですか?または、任意のアプリがIDと電子メールを読み取ることができますか? –

+0

@TomHart - getUserData()のドキュメント(他のアプリケーションがアカウントデータを読み取る方法)は次のように述べています。 "このメソッドでは、呼び出し元にAUTHENTICATE_ACCOUNTS権限を保持し、アカウントの認証者と同じUIDを使用する必要があります。これは、セットアップが適切に行われると、アプリだけがそのデータにアクセスできることを意味します。ただし、AccountManagerは機密データを保存する安全な領域ではありません。デバイスへの物理的なアクセスにより、誰でもそのデータを読み取ることができます。 参照:http://developer.android.com/reference/android/accounts/AccountManager.html#getUserData(android.accounts.Account、java.lang.String) –

+1

私はいくつかのテストを行いました。他のアカウントのデータは、私はキーに必要なだけです。ユーザーIDと電子メールを安全に保管するための推奨事項はありますか?私が考えることができるのは、.setUserData( "Some ^^!Really_StrangeEMa1L_Key!"、userEmail);のようなsetUserDataの本当にあいまいなキーを使うことです。 –

2

アカウントが追加されたときのいずれかのuserDataバンドルで行われることになっています:

AccountManager manager = AccountManager.get(context); 
manager.addAccountExplicitly(account, null, userData); 

または明示的に値を追加:

manager.setUserData(account, KEY, value); 

しかし、私はとのトラブルを抱えていますこれは:

AccountManager IllegalArgumentException: key is null

+0

返事をありがとう。私はアカウントマネージャーを断念してしまいました。私は最後にそれに非常に苦労しました。私のプロジェクトが成長しているように見えていると言えば、私はそれにうまく戻るかもしれません。私はすぐにあなたの答えをチェックします – JonWells

関連する問題