Android рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред рдПрдХ рднрд╛рдЧ

рдЫрд╡рд┐
2014 рдореЗрдВ рдпрд╛рд░реНрдб рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдЬреЗрд▓реАрдмреАрди рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ 60% рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдпрд╛ , рдирдП рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд░реБрдЭрд╛рди рджрд┐рдЦрд╛рдИ рджрд┐рдПред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реБрдИрдВред рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдПрдХ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдПрдХ рдЖрд╡реЗрджрди рдореЗрдВ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдПрдВрдбреНрд░реЙрдЗрдб рд╣рдореЗрдВ рд╕рд┐рдВрдХ рдПрдбреЗрдкреНрдЯрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдФрд░ рд╕рдордиреНрд╡рдпрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдРрдкреЗрдЬ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЙрдкрд╣рд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдЦрд╛рддрд╛


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рдЦрд╛рддрд╛ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВ? рд╕рдЪ рдореЗрдВ, рдХреНрдпреЛрдВ?

рд▓рд╛рднреЛрдВ рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢:

рдмрдиреНрд╕ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо:
1) рдкреНрд░рдорд╛рдгрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
2) рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛
3) рд╣рдорд╛рд░реЗ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реЗрд╡рд╛ рдмрдирд╛рдирд╛


рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрдХ - рдбрд┐рд╡рд╛рдЗрд╕ рдЦрд╛рддреЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддрд╛ рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЙрд╕рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЯреЛрдХрди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред

AbstractAccountAuthenticator - рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШрдЯрдХред рдЦрд╛рддреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рднреА рдпрд╛рдВрддреНрд░рд┐рдХреА (рдкреНрд░рд╛рдзрд┐рдХрд░рдг, рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдкрд░рд┐рд╕реАрдорди) рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрдХ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

AccountAuthenticatorActivity - рдкреНрд░рд╛рдзрд┐рдХрд░рдг / рдЦрд╛рддрд╛ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╡рд░реНрдЧред рдпрджрд┐ рдЦрд╛рддреЗ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ (рдЯреЛрдХрди рдЧрд╛рдпрдм рдпрд╛ рд╕рдбрд╝рд╛ рд╣реБрдЖ рд╣реИ) рддреЛ рдЗрд╕реЗ рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрдХ рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдЖрд░реЗрдЦ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
рдЫрд╡рд┐

рдЬрдм рд╣рдореЗрдВ рдПрдХ рдЯреЛрдХрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрдХ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - getAuthTokenред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рд╣реИ рдФрд░ рдЗрд╕реЗ рдереНрд░реЗрдб рдХреЗ UI рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реИ - рдмреНрд▓реЙрдХрдЧреЗрдЯ рдСрдереЛрдЯреЛрдХрдиред рд╣рдо рдЖрд░реЗрдЦ рдкрд░ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред

рдкреНрд░рдорд╛рдгрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд░рдорд╛рдгрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ AbstractAccountAuthenticator рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдХрдИ рддрд░реАрдХреЛрдВ (7 рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП) рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдордп, рдХреЗрд╡рд▓ рджреЛ рд╣реА рд░реБрдЪрд┐ рдХреЗ рд╣реИрдВред

addAccount
@Override public Bundle addAccount(AccountAuthenticatorResponse response, String accountType, String authTokenType, String[] requiredFeatures, Bundle options) throws NetworkErrorException { final Intent intent = new Intent(mContext, NewAccountActivity.class); intent.putExtra(NewAccountActivity.EXTRA_TOKEN_TYPE, accountType); intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); final Bundle bundle = new Bundle(); if (options != null) { bundle.putAll(options); } bundle.putParcelable(AccountManager.KEY_INTENT, intent); return bundle; } 


рд╡рд┐рдзрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдирд╛рдо рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ, рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдирдпрд╛ рдЦрд╛рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд░рдирд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╢реБрд░реВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдПрдХ рдЦрд╛рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
 <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 


getAuthToken
 @Override public Bundle getAuthToken(AccountAuthenticatorResponse response, Account account, String authTokenType, Bundle options) throws NetworkErrorException { final Bundle result = new Bundle(); final AccountManager am = AccountManager.get(mContext.getApplicationContext()); String authToken = am.peekAuthToken(account, authTokenType); if (TextUtils.isEmpty(authToken)) { final String password = am.getPassword(account); if (!TextUtils.isEmpty(password)) { authToken = AuthTokenLoader.signIn(mContext, account.name, password); } } if (!TextUtils.isEmpty(authToken)) { result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); result.putString(AccountManager.KEY_AUTHTOKEN, authToken); } else { final Intent intent = new Intent(mContext, LoginActivity.class); intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response); intent.putExtra(LoginActivity.EXTRA_TOKEN_TYPE, authTokenType); final Bundle bundle = new Bundle(); bundle.putParcelable(AccountManager.KEY_INTENT, intent); } return result; } 


рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд╕рдордп рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: рд╣рдо рдкреАрдХрдСрдереЗрдВрдЯреЗрди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЯреЛрдХрди рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╕рддреНрдпрд╛рдкрди рдкрд░реАрдХреНрд╖рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рд░реНрд╡рд░ рдореЗрдВ рдЯреВрдЯ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ рдкрд░рд┐рдгрд╛рдо рд▓реМрдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдЯреЛрдХрди рдирд╣реАрдВ рд╣реИ рдФрд░ / рдпрд╛ рд╕рд░реНрд╡рд░ рдиреЗ рд╣рдореЗрдВ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрд╕реА рдЗрд░рд╛рджреЗ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХрд┐ AddAccount рд╡рд┐рдзрд┐ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЧрддрд┐рд╡рд┐рдзрд┐ рдмрдирд╛рдирд╛


рд╣рдорд╛рд░реА рдЧрддрд┐рд╡рд┐рдзрд┐ AccountAuthenticatorActivity рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рд╕рдЦреНрддреА рд╕реЗ рдмреЛрд▓рдирд╛, рдпрд╣ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: AccountAuthenticatorActivity рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдХреЛрдб рдХреА 20 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ рдЬреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐ рдореЗрдВ рд╣рд╛рде рд╕реЗ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ)ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реЙрдЧрд┐рди / рдкрд╛рд╕рд╡рд░реНрдб рдлрд╝реАрд▓реНрдб рдФрд░ рд▓реЙрдЧрд┐рди рдмрдЯрди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЧрддрд┐рд╡рд┐рдзрд┐ рд╣реЛрдЧреАред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк AccountManager рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред AuthTokenLoader рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдХрд┐рд╕реА рднреА рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп рд╕рд░рд▓ рд╣реИ - рд╕рд░реНрд╡рд░ рд╕реЗ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред

onTokenReceived
 public void onTokenReceived(Account account, String password, String token) { final AccountManager am = AccountManager.get(this); final Bundle result = new Bundle(); if (am.addAccountExplicitly(account, password, new Bundle())) { result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); result.putString(AccountManager.KEY_AUTHTOKEN, token); am.setAuthToken(account, account.type, token); } else { result.putString(AccountManager.KEY_ERROR_MESSAGE, getString(R.string.account_already_exists)); } setAccountAuthenticatorResult(result); setResult(RESULT_OK); finish(); } 


рдпрд╣ рд╡рд┐рдзрд┐ рдЙрд╕ рд╕рдордп рдХрд╣рд▓рд╛рддреА рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЬреЛ рдЦрд╛рддреЗ рдХреА рд╡реИрдзрддрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ) рдФрд░, рддрджрдиреБрд╕рд╛рд░, рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдПрдХ рдЦрд╛рддрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред setAccountAuthenticatorResult - рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрдХ рдХреЛ рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ред

рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛


рд╕реЗрд╡рд╛ рдкреНрд░рдгрд╛рд▓реА рдФрд░ рдЕрдиреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╣рдорд╛рд░реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧреАред рд╕реЗрд╡рд╛ рдХреЛрдб рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд╣реИ:
GitHubAuthenticatorService
 public class GitHubAuthenticatorService extends Service { private GitHubAuthenticator mAuthenticator; @Override public void onCreate() { super.onCreate(); mAuthenticator = new GitHubAuthenticator(getApplicationContext()); } @Override public IBinder onBind(Intent intent) { return mAuthenticator.getIBinder(); } } 


рд╡рд╣ рдЬреЛ рдХрд░рддрд╛ рд╣реИ рд╡рд╣ рд╣рдорд╛рд░реЗ рдкреНрд░рдорд╛рдгрдХ рдХреЗ рдЖрдИрдмреАрдПрдВрдбрд░ рдХреЛ рд▓реМрдЯрд╛ рджреЗрддрд╛ рд╣реИред рдФрд░ GetIBinder рд╡рд┐рдзрд┐ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА AbstractAccountAuthenticator рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдкрддреНрд░ рдореЗрдВ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред
 <service android:name=".account.GitHubAuthenticatorService" android:exported="false"> <intent-filter> <action android:name="android.accounts.AccountAuthenticator" /> </intent-filter> <meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/github_authenticator" /> </service> 

рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рд╡рд┐рд╡рд░рдг рд░рд╣рддрд╛ рд╣реИ: рдЖрдкрдиреЗ рдРрд╕реА рд░реЗрдЦрд╛ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рд╣реЛрдЧрд╛
 android:resource="@xml/github_authenticator" 

рдпрд╣ рд╡рд╣ рдореЗрдЯрд╛рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╣рдорд╛рд░реЗ рдкреНрд░рдорд╛рдгрдХ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рд░реЗрд╕ / xml рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХреЗ рдЖрдЗрдХрди, рдЙрд╕рдХреЗ рдирд╛рдо рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рд╕рд░рд▓ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
 <?xml version="1.0" encoding="utf-8"?> <account-authenticator xmlns:android="http://schemas.android.com/apk/res/android" android:accountType="com.github.elegion" android:icon="@drawable/ic_github" android:label="@string/github" android:smallIcon="@drawable/ic_github" /> 

рдпрд╣ рд╕рдм, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЗрди рдореБрд╢реНрдХрд┐рд▓ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЕрдкрдирд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рд╛ред рдЗрд╕рдХреА рд╕рднреА рд╕реНрдкрд╖реНрдЯ рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 2 рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддреА рд╣реИ, рдПрдХ xml рдореЗрдЯрд╛рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдФрд░ рдкреНрд░рдХрдЯ рдореЗрдВ рд╕реЗрд╡рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рд╣рдорд╛рд░реЗ рдЦрд╛рддреЗ рдХреЛ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рддрд░реАрдХреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ, рдЬрд┐рдирдХреА рдЪрд░реНрдЪрд╛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред

PS рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ: AccountManager рдХреЗ рдкрд╛рд╕ рдПрдХ setUserData (рдЕрдВрддрд┐рдо рдЦрд╛рддрд╛ рдЦрд╛рддрд╛, рдЕрдВрддрд┐рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреБрдВрдЬреА, рдЕрдВрддрд┐рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореВрд▓реНрдп) рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддреА рд╣реИред рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореИрдВрдиреЗ рдереЛрдбрд╝реА рдКрдВрдЪреА рдмрд╛рдд рдХреАред рдпрд╣ рдмрд╛рдХреА рдХреЗ рдЙрдкрд╛рдВрдЧ рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд▓рд╕ рд╣реИ - рдЖрдВрддрд░рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдиреЗ / рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб рдпрд╣рд╛рдВ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

Android рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рдиред рднрд╛рдЧ рджреЛ

Source: https://habr.com/ru/post/In206210/


All Articles