3

次のアカウント認証クラスがあります

public class AppAuthenticator extends AbstractAccountAuthenticator {

private Context mContext;

public AppAuthenticator(Context context) {
    super(context);
    mContext = context;
}

//This is used by the login activity when the guy logs in after starting the app
public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, 
        String[] requiredFeatures, Bundle options)
        throws NetworkErrorException {
        //...Code Here...
    }

}

public class AuthenticationService extends Service {

private static AppAuthenticator sAuthenticator = null;

public AuthenticationService() {
    super();
}

@Override
public IBinder onBind(Intent intent) {
    IBinder res = null;
    if (intent.getAction().equals(android.accounts.AccountManager.ACTION_AUTHENTICATOR_INTENT))
        res = getAuthenticator().getIBinder();
    return res;
}

private AppAuthenticator getAuthenticator() {
    if (sAuthenticator == null)
        sAuthenticator = new AppAuthenticator(this);
    return sAuthenticator;
}
}

およびマニフェスト: xml/authenticator.xml

<account-authenticator 
    xmlns:android="http://schems.android.com/apk/res/android"
    android:accountType="@string/account_type" 
    android:label="@string/app_name" 
    android:icon="@drawable/benchcap" />

androidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.app.app"
    android:versionCode="1"
    android:versionName="1.0" >

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />

<application
    android:name="com.app.app.AppApplication"
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >

    <service android:name=".AuthenticationService"
        android:exported="true" android:process=":auth">
        <intent-filter>
            <action android:name="android.accounts.AccountAuthenticator" />
        </intent-filter>

        <meta-data
            android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator" />
    </service>
</application>

@string/app_name="App"_@string/account_type="com.app.app"

だから問題は、アプリケーションがインストールされたときです

"Unable to load service info ResolveInfo{40f00c40 com.app.app.AuthenticationService p=0 m=0x108000}
 Loaded meta-data for 0 account types, 0 accounts in 4ms(wall) 2ms(cpu)"

アカウントを追加しようとすると、「発信者 UID がオーセンティケーター UID とは異なります」という SecurityException が発生します (ここで説明: SecurityException: 発信者 uid XXXX は、オーセンティケーターの uid とは異なります)。サービスは登録されていないため、これは理にかなっています。

システムはそれ以上の情報を提供しません。

認証サービスを適切に登録するには、何を追加する必要がありますか?

4

0 に答える 0