2015-10-21 18 views
17

基本認証が成功したら、後で使用するためにアカウントを追加します。私は、次のコードを使用してこのアカウントを作成しようとしたとき:addAccountExplicitly(アカウント、パスワード、ヌル)でAndroidアプリがクラッシュする。

AccountManager accountManager = AccountManager.get(getBaseContext()); 
final Account basicAccount = new Account(mEmail, "com.example"); 
accountManager.addAccountExplicitly(basicAccount, mPassword, null); 
addAccountExplicitly(...)は、次のエラーでアプリがクラッシュと呼ばれ

E/AndroidRuntime: FATAL EXCEPTION: main 
E/AndroidRuntime: Process: com.example, PID: 19094 
E/AndroidRuntime: java.lang.SecurityException: uid 10107 cannot explicitly add accounts of type: com.example 
E/AndroidRuntime:  at android.os.Parcel.readException(Parcel.java:1599) 
E/AndroidRuntime:  at android.os.Parcel.readException(Parcel.java:1552) 
E/AndroidRuntime:  at android.accounts.IAccountManager$Stub$Proxy.addAccountExplicitly(IAccountManager.java:890) 
E/AndroidRuntime:  at android.accounts.AccountManager.addAccountExplicitly(AccountManager.java:712) 
E/AndroidRuntime:  at com.example.LoginActivity$UserLoginTask.onPostExecute(LoginActivity.java:244) 
E/AndroidRuntime:  at com.example.LoginActivity$UserLoginTask.onPostExecute(LoginActivity.java:209) 
E/AndroidRuntime:  at android.os.AsyncTask.finish(AsyncTask.java:651) 
E/AndroidRuntime:  at android.os.AsyncTask.-wrap1(AsyncTask.java) 
E/AndroidRuntime:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:668) 
E/AndroidRuntime:  at android.os.Handler.dispatchMessage(Handler.java:102) 
E/AndroidRuntime:  at android.os.Looper.loop(Looper.java:148) 
E/AndroidRuntime:  at android.app.ActivityThread.main(ActivityThread.java:5417) 
E/AndroidRuntime:  at java.lang.reflect.Method.invoke(Native Method) 
E/AndroidRuntime:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
E/AndroidRuntime:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
W/ActivityManager: Force finishing activity com.example/.LoginActivity 

質問:

  1. 自分のAccountTypeがmy authenticator.xmlで指定されたものと同じであることは確かです。なぜ私のコードがクラッシュするのですか?
  2. 基本認証でAccountManagerとAccountを使用することはできますか?私はこれの良い例を見つけることができませんでした(彼らはすべてトークンを使用しています...)
  3. 私の考えは、このアカウントをいくつかのアプリケーションに使用することです。認証(インテント付き)にサービスを使用することがベストプラクティスと考えられていますか?これに関する良いチュートリアルはありますか?次のスニペットは、AndroidManifest.xmlを中に行方不明になったので、

おかげで、オベ

答えて

11

1)クラッシュの理由でした。

<service android:name="com.example.accounts.GenericAccountService"> 
    <intent-filter> 
     <action android:name="android.accounts.AccountAuthenticator" /> 
    </intent-filter> 
    <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" /> 
</service> 

2)ベ​​ストプラクティスの例はまだありませんが、絶対に可能です。

3)わかりません。まだ...

+0

は、Android開発者で、このコードの更新部分を参照してください。トレーニング/ id-auth/custom_auth.html#TaskFour – Zon

1

3番目の質問に1つのゴールデンレスポンスはありません。

すべてのアプリで同じ名前が使用されている場合は、サービスとみなして自分のアプリに制限することを忘れないでください。

ただし、アプリがインストールされた直後にユーザーがサインインすることについて混乱する可能性があるため、ユーザーが別々のアプリにログインできるようにすることをおすすめします。 Googleデベロッパーコンソールで同じアプリの複数の個別の秘密鍵を生成することで、すべてのアプリで同じユーザーのLOCAL_IDを取得できます。あなたはアプリの"com.example"として一意の識別子を使用している

6

は、それは私が同じアカウント名とタイプを持つデバイスにインストールされている別のアプリを持っていたことが起こっていた私の場合は"authenticator.xml"

+1

sultanの回答にandroid:accountType = "pkgname"とアカウントアカウント=新しいアカウント(context.getString(R.string.app_name)、context.getPackageName())を確認してください。 ; accountManager.addAccountExplicitly(アカウント、 "123456"、バンドル); ロガー。デバッグ(TAG、 "Account created successfully");同じです – sector11

+0

短いとポイントに、ありがとう! – Adi

10

に同じだかどうかを確認、しかしください。私がインストールしようとしていたものとは異なる署名証明書を使っています。

だから、アプリをクラッシュさせていた。

CheckignメソッドaddAccountExplicityためandroid doc、それは言う:https://developer.android.com/:私の問題だった

This method requires the caller to have a signature match with the authenticator that owns the specified account.

関連する問題