Magic Link Registration for Web Accounts
HYPR SDK for Android: Web Authentication
Do This First
This document assumes that your application has been configured using Push Notification Setup.
HYPR SDK for Android allows for registration using deep links and Magic Links.
Setup
Follow the Firebase documentation for setting up Dynamic Links for your Android App.
To support Firebase Dynamic Links for registration, add the following Firebase dependencies in app/webaccountunlock/app/build.gradle
:
dependencies {
// Out of Band Authentication
implementation platform('com.google.firebase:firebase-bom:29.0.3')
implementation 'com.google.firebase:firebase-messaging:20.2.1'
}
Within AndroidManifest.xml
and the activity that handles the Magic Link, specify the Uniform Resource Identifiers (URIs) to which it will respond:
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "hypr://register” -->
<data
android:host="register"
android:scheme="hypr" />
<!-- Accepts URIs that begin with "http://hypr.com/mobileregister” -->
<data
android:host="hypr.com"
android:pathPrefix="/mobileregister"
android:scheme="http" />
<!-- Accepts URIs that begin with "https://hypr.com/dynamiclink” -->
<data
android:host="hypr.com"
android:pathPrefix="/dynamiclink"
android:scheme="https" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
</activity>
Place the following code within the activity that processes the Dynamic Link:
@Override
protected void onResume() {
super.onResume();
onResumeStart();
}
public boolean doesIntentContainDynamicLink() {
boolean doesIntentContainDynamicLink = getIntent() != null
&& getIntent().getData() != null
&& getIntent().getData().toString().contains("https://hyprapp.page.link");
return doesIntentContainDynamicLink;
}
public void startDynamicLinkIntent() {
if (getIntent() != null) {
FirebaseDynamicLinks.getInstance()
.getDynamicLink(getIntent())
.addOnSuccessListener(this, new OnSuccessListener<PendingDynamicLinkData>() {
@Override
public void onSuccess(PendingDynamicLinkData pendingDynamicLinkData) {
setIntent(null);
if (pendingDynamicLinkData != null) {
Uri uri = pendingDynamicLinkData.getLink();
Intent magicLinkIntent = new Intent();
magicLinkIntent.setData(uri);
onNewIntent(magicLinkIntent);
onResumeStart();
}
}
});
}
}
private void onResumeStart(){
if (isMagicLinkUriAvailable()) {
HyprActions.getInstance().addMachineWithMagicLink(this, new HyprActionCallbacks.HyprActionCallback() {
@Override
public void onSuccess(@NonNull HyprStatusResult hyprStatusResult) {
toast("sucess");
}
@Override
public void onFailure(@NonNull HyprStatusResult hyprStatusResult) {
toast("fail");
}
});
}
else if(doesIntentContainDynamicLink()) {
startDynamicLinkIntent();
}
}
private boolean isMagicLinkUriAvailable() {
boolean isMagicLinkUriAvailable = HyprApp.getDbAdapter().isMagicLinkUriAvailable(this);
return isMagicLinkUriAvailable;
}
Updated 5 months ago