Access to Android AccountManager for React Native inspired by cordova-android-accountmanager plugin It currently only supports explicit account handling (programatically adding/removing/settin/getting account details to the AccountManager). Only the following methods are available;
- AccountManager.addAccountExplicitly('account_type', 'userName', 'userPassword');
- AccountManager.removeAccount(account);
- AccountManager.getAccountsByType('account_type');
- AccountManager.getUserData(account, 'key');
- AccountManager.setUserData(account, 'key', 'value')
npm install --save react-native-account-manager
No addiontional steps required.
react-native link react-native-account-manager
- In your AndroidManifest file, add this service in
<application />
<service android:name="com.gointegro.accountmanager.AuthenticatorService">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator" />
</intent-filter>
<meta-data android:name="android.accounts.AccountAuthenticator" android:resource="@xml/authenticator" />
</service>
- Create an
authenticator.xml
file in theres/xml
folder and add this code
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="{your app package name}"
android:icon="@mipmap/ic_launcher_round"
android:smallIcon="@mipmap/ic_launcher_round"
android:label="@string/app_name"/>
- in
android/app/build.gradle
:
dependencies {
...
implementation project(':react-native-account-manager')
}
- in
android/settings.gradle
:
...
include ':app'
+ include ':react-native-account-manager''
+ project(':react-native-account-manager').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-account-manager/android')
- in
MainApplication.java
:
+ import com.gointegro.accountmanager.AccountManagerPackage;
public class MainApplication extends Application implements ReactApplication {
//......
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
+ new AccountManagerPackage(),
new MainReactPackage()
);
}
......
}
import AccountManager from 'react-native-account-manager';
AccountManager.addAccountExplicitly('accountName', 'userName', 'userPassword')
.then((account) => {
// console.log('account successfully added', account)
AccountManager.removeAccount(account).then(() => {
// console.log('account successfully removed');
})
}).catch((e) => {
// console.log('fail to add account', e);
});
import AccountManager from 'react-native-account-manager';
AccountManager.getAccountsByType('accountName').then((accounts) => {
// console.log('available accounts', accounts);
let [firstAccount] = accounts;
AccountManager.getUserData(firstAccount, 'storedKey').then((storedData) => {
// console.log('stored data for storeKey', storedData);
AccountManager.setUserData(account, 'storedKey', JSON.stringify({foo: "bar"})).then(() => {
// console.log('data successfully stored');
})
});
})
This means you're trying to access an account created with the same type but by an app with a different signature. The signature is defined in the signing of the app, defined by the keystore or upload key uploaded to the Play Store. You cannot solve this issue, all apps that share an account must have the same signature. Learn more