同期アダプター フレームワークでは、同期アダプターがデバイス ストレージ間でデータを転送することを前提としています。 ログイン アクセスを必要とするアカウントとサーバー ストレージに関連付けられている。このため、 フレームワークは、同期処理の一環として認証システムと呼ばれるコンポーネントを提供することを想定しています。 設定してください。このコンポーネントは、Android アカウントと認証フレームワークに接続し、 は、ログイン情報などのユーザー認証情報を処理するための標準インターフェースを提供します。
アプリでアカウントを使用しない場合でも、認証システム コンポーネントを提供する必要があります。
アカウントやサーバー ログインを使用しない場合、認証システムで処理される情報は
スタブメソッドを含む認証システム コンポーネントを指定できます。
あります。バインドされた Service
も指定する必要があります。
同期アダプター フレームワークで認証システムのメソッドを呼び出すことができます。
このレッスンでは、スタブ認証システムの必須部分を定義する方法を説明します。
同期アダプター フレームワークの要件を満たす必要があります。実際の ID を
については、次のリファレンス ドキュメントをご覧ください:
AbstractAccountAuthenticator
。
スタブ認証システム コンポーネントを追加する
スタブ認証システムコンポーネントをアプリに追加するには、
AbstractAccountAuthenticator
を作成し、必要なメソッドをスタブアウトする。
null
を返すか、例外をスローします。
次のスニペットは、スタブ認証システムクラスの例を示しています。
Kotlin
/* * Implement AbstractAccountAuthenticator and stub out all * of its methods */ class Authenticator(context: Context) // Simple constructor : AbstractAccountAuthenticator(context) { // Editing properties is not supported override fun editProperties(r: AccountAuthenticatorResponse, s: String): Bundle { throw UnsupportedOperationException() } // Don't add additional accounts @Throws(NetworkErrorException::class) override fun addAccount( r: AccountAuthenticatorResponse, s: String, s2: String, strings: Array<String>, bundle: Bundle ): Bundle? = null // Ignore attempts to confirm credentials @Throws(NetworkErrorException::class) override fun confirmCredentials( r: AccountAuthenticatorResponse, account: Account, bundle: Bundle ): Bundle? = null // Getting an authentication token is not supported @Throws(NetworkErrorException::class) override fun getAuthToken( r: AccountAuthenticatorResponse, account: Account, s: String, bundle: Bundle ): Bundle { throw UnsupportedOperationException() } // Getting a label for the auth token is not supported override fun getAuthTokenLabel(s: String): String { throw UnsupportedOperationException() } // Updating user credentials is not supported @Throws(NetworkErrorException::class) override fun updateCredentials( r: AccountAuthenticatorResponse, account: Account, s: String, bundle: Bundle ): Bundle { throw UnsupportedOperationException() } // Checking features for the account is not supported @Throws(NetworkErrorException::class) override fun hasFeatures( r: AccountAuthenticatorResponse, account: Account, strings: Array<String> ): Bundle { throw UnsupportedOperationException() } }
Java
/* * Implement AbstractAccountAuthenticator and stub out all * of its methods */ public class Authenticator extends AbstractAccountAuthenticator { // Simple constructor public Authenticator(Context context) { super(context); } // Editing properties is not supported @Override public Bundle editProperties( AccountAuthenticatorResponse r, String s) { throw new UnsupportedOperationException(); } // Don't add additional accounts @Override public Bundle addAccount( AccountAuthenticatorResponse r, String s, String s2, String[] strings, Bundle bundle) throws NetworkErrorException { return null; } // Ignore attempts to confirm credentials @Override public Bundle confirmCredentials( AccountAuthenticatorResponse r, Account account, Bundle bundle) throws NetworkErrorException { return null; } // Getting an authentication token is not supported @Override public Bundle getAuthToken( AccountAuthenticatorResponse r, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Getting a label for the auth token is not supported @Override public String getAuthTokenLabel(String s) { throw new UnsupportedOperationException(); } // Updating user credentials is not supported @Override public Bundle updateCredentials( AccountAuthenticatorResponse r, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Checking features for the account is not supported @Override public Bundle hasFeatures( AccountAuthenticatorResponse r, Account account, String[] strings) throws NetworkErrorException { throw new UnsupportedOperationException(); } }
認証システムをフレームワークにバインドする
同期アダプター フレームワークが認証システムにアクセスするには、 対応できます。このサービスは、フレームワークの実行を可能にする Android バインダ オブジェクトを提供します。 を呼び出して、認証システムとフレームワークの間でデータを渡します。
次のスニペットは、バインドされた Service
を定義する方法を示しています。
Kotlin
/** * A bound Service that instantiates the authenticator * when started. */ class AuthenticatorService : Service() { // Instance field that stores the authenticator object private lateinit var mAuthenticator: Authenticator override fun onCreate() { // Create a new authenticator object mAuthenticator = Authenticator(getApplicationContext()) } /* * When the system binds to this Service to make the RPC call * return the authenticator's IBinder. */ override fun onBind(intent: Intent?): IBinder = mAuthenticator.iBinder }
Java
/** * A bound Service that instantiates the authenticator * when started. */ public class AuthenticatorService extends Service { ... // Instance field that stores the authenticator object private Authenticator mAuthenticator; @Override public void onCreate() { // Create a new authenticator object mAuthenticator = new Authenticator(getApplicationContext()); } /* * When the system binds to this Service to make the RPC call * return the authenticator's IBinder. */ @Override public IBinder onBind(Intent intent) { return mAuthenticator.getIBinder(); } }
認証システム メタデータ ファイルを追加する
認証システム コンポーネントを同期アダプターとアカウント フレームワークに接続するには、以下を行う必要があります。
コンポーネントを記述するメタデータをフレームワークに提供します。このメタデータは、
同期アダプター用に作成したアカウント タイプを指定し、ユーザー インターフェース要素を宣言します。
(アカウントの種類をユーザーに表示する場合)に表示される名前を入力します。これを宣言
メタデータ(アプリ プロジェクトの /res/xml/
ディレクトリに保存されている XML ファイル)にメタデータを追加します。
ファイルには任意の名前を付けることができますが、通常は authenticator.xml
と呼ばれます。
この XML ファイルには、次の要素である <account-authenticator>
が 1 つ含まれています。
次の属性があります。
-
android:accountType
-
同期アダプター フレームワークでは、各同期アダプターに次の形式のアカウント タイプが必要です。
学びます。フレームワークは、同期アダプターの一部としてアカウント タイプを使用します。
あります。ログインが必要なサーバーでは、アカウントの種類と
ユーザー アカウントが、ログイン認証情報の一部としてサーバーに送信されます。
ログインが不要なサーバーについても、アカウント タイプを指定する必要があります。対象: 管理しているドメイン名を使用してください。フレームワークはこれを使用して、 値はサーバーに送信されません。
-
android:icon
-
ドローアブルへのポインタ
リソースです。同期アダプターを表示する場合は、
res/xml/syncadapter.xml
の属性android:userVisible="true"
、 このアイコン リソースを指定する必要があります。これは Google Chat の [アカウント] セクションで システムの設定アプリ -
android:smallIcon
-
ドローアブルへのポインタ
リソースです。このリソースは、代わりに
システムの設定アプリの [アカウント] セクションで
android:icon
画面のサイズに応じて異なります。 -
android:label
-
ユーザー向けにアカウント タイプを識別するローカライズ可能な文字列です。同期アダプターを
属性
android:userVisible="true"
を指定して表示できます。res/xml/syncadapter.xml
の場合は、この文字列を指定する必要があります。これは システム設定アプリの [アカウント] セクション( あります。
次のスニペットは、前に作成した認証システムの XML ファイルを示しています。
<?xml version="1.0" encoding="utf-8"?> <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="example.com" android:icon="@drawable/ic_launcher" android:smallIcon="@drawable/ic_launcher" android:label="@string/app_name"/>
マニフェストで認証システムを宣言する
前のステップでは、認証システムをリンクするバインドされた Service
を作成しました。
同期アダプター フレームワークに接続します。システムでこのサービスを識別するには、アプリで宣言します
次の行を追加します。
<service>
という子要素として
<application>
:
<service android:name="com.example.android.syncadapter.AuthenticatorService"> <intent-filter> <action android:name="android.accounts.AccountAuthenticator"/> </intent-filter> <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" /> </service>
「
<intent-filter>
要素は、インテントのアクションによってトリガーされるフィルタを設定します
android.accounts.AccountAuthenticator
:
あります。フィルタがトリガーされると、システムは AuthenticatorService
を開始します。
認証システムをラップするために指定したバインドされた Service
。
「
<meta-data>
要素で認証システムのメタデータを宣言します。「
android:name
属性はメタデータを認証フレームワークにリンクします。「
android:resource
要素は、前に作成した認証システム メタデータ ファイルの名前を指定します。
認証システムに加えて、同期アダプターにはコンテンツ プロバイダが必要です。アプリが コンテンツ プロバイダをすでに使用している場合は、次のレッスンに進み、スタブ コンテンツの作成方法をご確認ください。 プロバイダそれ以外の場合は、同期アダプターを作成するに進んでください。