The Android SDK is a set of lightweight libraries. The libraries deliver as Android Archive Repository, .aar, files. The minimum supported version of Android is v7, level 24.
Prove manages a maven repository with Android binaries to enable integration with Gradle.
Update the dependencies object in the build.gradle file:
Copy
Ask AI
dependencies { // Existing dependencies are here. // Add the Prove Link dependencies: implementation 'com.prove.sdk:proveauth:6.4.1'}
You’ll also need to point to the repository by updating your settings.gradle file with the Maven repository:
Copy
Ask AI
dependencyResolutionManagement { // Existing repository settings are here. repositories { // Existing repositories are here. // Add the Prove Link Maven repository: maven { url = "https://prove.jfrog.io/artifactory/libs-public-maven/" } }}
The following needs added to the build.gradle file to also download dependency libraries:
Copy
Ask AI
dependencies { implementation fileTree('libs')}
If you receive an error message on the application@fullBackupContent value, you can resolve it by adding this line of code to your application AndroidManifest.xml file inside the <application>...</application> node. Add it as an attribute to the opening application tag:
The Prove Auth SDK and its children SDKs merge the following permissions into the main application:
Copy
Ask AI
<!-- Required to perform authentication --><uses-permission android:name="android.permission.INTERNET" /><!-- Required to access information about networks --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- Required for ConnectivityManager.requestNetwork --><uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Unlike the Web SDK, when using the Android SDK, use the mobile flow. Pass mobile to the Unify() function on the server. In a mobile flow, OTP validation is performed on the mobile phone.
In the mobile flow, once OTP validation is complete, the AuthFinishStep function executes.
The SDK requires an authToken as a parameter for the Authenticate() function. This token returns from the Unify() call of the server SDK. The token is session specific, limiting it to a single flow. It also expires after 15 minutes.
To start the flow, you’ll need to send a request to your backend server with possession type, and an optional phone number if using Prove’s possession check.
Copy
Ask AI
String initialize(String phoneNumber, String possessionType) { YourBackendClient backend = new YourBackendClient(); // Backend API client // TODO: Build your InitializeRequest object InitializeRequest initializeRequest = new InitializeRequest(phoneNumber, possessionType); // Send an initialize request to your backend server to get authToken InitializeResponse response = backend.initialize(initializeRequest); // TODO: define your own InitializeResponse object to parse authToken string return response.getAuthToken();}
Once you have the authToken, build the authenticator for the mobile flow.
Java
Copy
Ask AI
// Object implementing AuthFinishStep interfaceAuthFinishStep authFinishStep = new AuthFinishStep() {...};// Objects implementing OtpStartStep/OtpFinishStep interfacesOtpStartStep otpStartStep = new OtpStartStep() {...};OtpFinishStep otpFinishStep = new OtpFinishStep() {...};ProveAuth proveAuth = ProveAuth.builder() .withAuthFinishStep(authId -> verify(authId)) // verify(authId) call defined in #Validate the Mobile Phone section .withOtpFallback(otpStartStep, otpFinishStep) .withContext(this) .build();
The cellular data connection can sometimes be unavailable during testing. The Builder class offers a withTestMode(boolean testMode) method, which permits simulated successful session results while connected to a Wi-Fi network only (without a cellular data connection available). Testing using a Wi-Fi connection is useful in the Sandbox environment.
Java
Copy
Ask AI
ProveAuth proveAuth = ProveAuth.builder() .withAuthFinishStep(authId -> verify(authId)) .withOtpFallback(otpStartStep, otpFinishStep) .withContext(this) .withTestMode(true) // Test mode flag .build();
Java
Copy
Ask AI
// Object implementing AuthFinishStep interfaceAuthFinishStep authFinishStep = new AuthFinishStep() {...};// Objects implementing OtpStartStep/OtpFinishStep interfacesOtpStartStep otpStartStep = new OtpStartStep() {...};OtpFinishStep otpFinishStep = new OtpFinishStep() {...};ProveAuth proveAuth = ProveAuth.builder() .withAuthFinishStep(authId -> verify(authId)) // verify(authId) call defined in #Validate the Mobile Phone section .withOtpFallback(otpStartStep, otpFinishStep) .withContext(this) .build();
The cellular data connection can sometimes be unavailable during testing. The Builder class offers a withTestMode(boolean testMode) method, which permits simulated successful session results while connected to a Wi-Fi network only (without a cellular data connection available). Testing using a Wi-Fi connection is useful in the Sandbox environment.
Java
Copy
Ask AI
ProveAuth proveAuth = ProveAuth.builder() .withAuthFinishStep(authId -> verify(authId)) .withOtpFallback(otpStartStep, otpFinishStep) .withContext(this) .withTestMode(true) // Test mode flag .build();
Java
Copy
Ask AI
// Object implementing AuthFinishStep interfaceAuthFinishStep authFinishStep = new AuthFinishStep() {...};ProveAuth proveAuth = ProveAuth.builder() .withAuthFinishStep(authId -> verify(authId)) // verify(authId) call defined in #Validate the Mobile Phone section .withContext(this) .build();
The cellular data connection can sometimes be unavailable during testing. The Builder class offers a withTestMode(boolean testMode) method, which permits simulated successful session results while connected to a Wi-Fi network only (without a cellular data connection available). Testing using a Wi-Fi connection is useful in the Sandbox environment.
Java
Copy
Ask AI
ProveAuth proveAuth = ProveAuth.builder() .withAuthFinishStep(authId -> verify(authId)) .withContext(this) .withTestMode(true) // Test mode flag .build();
The ProveAuth object is thread safe. You can use it as a singleton. Most Prove Auth methods are blocking and therefore can’t execute in the main application thread. The application employs an executor service with a minimum of two threads to manage threads due to the SDK’s ability to process concurrent blocking requests.
Copy
Ask AI
public class MyAuthenticator { private final MyBackendClient backend = new MyBackendClient(); // Backend API client private final AuthFinishStep authFinishStep = new AuthFinishStep() { @Override void execute(String authId) { try { AuthFinishResponse response = backend.authFinish("My App", authId); ... // Check the authentication status returned in the response } catch (IOException e) { String failureCause = e.getCause() != null ? e.getCause().getMessage() : "Failed to request authentication results"; // Authentication failed due to request failure } } }; private ProveAuth proveAuth; public MyAuthenticator(Context context) { proveAuth = ProveAuth.builder() .withAuthFinishStep(authFinishStep) .withOtpFallback(otpStartStep, otpFinishStep) .withContext(context) .build(); } public void authenticate() throws IOException, ProveAuthException { AuthStartResponse response = backend.authStart("My Prove Auth App"); proveAuth.authenticate(response.getAuthToken()); }}
In the AuthFinishStep, you’ll specify a function to call once the possession checks are complete on the mobile phone. This endpoint on your back end server calls the Validate() function to check phone number validation. If it was successful, the server returns the results from the Challenge() function, including customer information.
Copy
Ask AI
// Send a verify request to get return customer information.void verify(String: authId) { YourBackendClient backend = new YourBackendClient(); // Backend API client // Build your VerifyRequest object VerifyRequest verifyRequest = new VerifyRequest(authId, ...); // Send a verify request to your backend server to get return customer information. VerifyResponse response = backend.verify(verifyRequest);}