2.3.0.0 and Later

Updated Key Manager

The method signature of KeyManager.queryLocalKeysAsync() has changed from

KeyManager.queryLocalKeysAsync(
    String userId, boolean forceUpdate, CancellationToken cancellationToken)

to

KeyManager.queryLocalKeysAsync(
    String userId, CancellationToken cancellationToken)

The parameter forceUpdate did only refresh the keys' grant information, which was deprecated in 2.2.0.0 and must not be used any more. Consult the Javadoc for more information.

Migration

Omit the forceUpdate parameter when calling KeyManager.queryLocalKeysAsync(). This won't affect your application's behaviour unless you were using deprecated parts of the SDK.

Android Permissions

Adding the com.tapkey.android:Tapkey.MobileLib as dependency does not add any uses-permission entries to target app's AndroidManifest any more. Instead, those parts of the SDK that require specific Android permissions are annotated with @RequiresPermission().

Migration

Bootstrapping

Bootstrapping the SDK requires the INTERNET permission.

TapkeyServiceFactoryBuilder b = new TapkeyServiceFactoryBuilder(this);
this.tapkeyServiceFactory = b.build();

Add the following uses-permission entry in a target app's AndroidManifest, if not already present:

<manifest  >    <uses-permission android:name="android.permission.INTERNET"/>
    <application  ></manifest>

Polling

Using the SDK's PollingScheduler class requires the RECEIVE_BOOT_COMPLETED permission. Otherwise, background polling won't work after the device reboots.

In order to be able to use

PollingScheduler.register();

add the following uses-permission entry in a target app's AndroidManifest, if not already present:

<manifest  >    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
    <application  ></manifest>

Bluetooth

Interacting with locks via Bluetooth requires the BLUETOOTH, BLUETOOTH_ADMIN and ACCESS_COARSE_LOCATION permissions. The latter is required to list devices nearby.

bleLockScanner.startForegroundScan();

Add the following uses-permission entry in a target app's AndroidManifest, if not already present:

<manifest  >    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <application  ></manifest>