[links] Refactor links to use builder classes

This commit is contained in:
Chris Bianca
2018-03-23 13:24:31 +00:00
parent 526ea04853
commit 7f90e485c8
14 changed files with 766 additions and 228 deletions
@@ -6,8 +6,6 @@ import android.net.Uri;
import android.support.annotation.NonNull;
import android.util.Log;
import java.util.Map;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.LifecycleEventListener;
import com.facebook.react.bridge.Promise;
@@ -16,7 +14,6 @@ import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.google.firebase.appinvite.FirebaseAppInvite;
import com.google.firebase.dynamiclinks.DynamicLink;
import com.google.firebase.dynamiclinks.FirebaseDynamicLinks;
@@ -47,15 +44,12 @@ public class RNFirebaseLinks extends ReactContextBaseJavaModule implements Activ
}
@ReactMethod
public void createDynamicLink(final ReadableMap parameters, final Promise promise) {
public void createDynamicLink(final ReadableMap linkData, final Promise promise) {
try {
Map<String, Object> metaData = Utils.recursivelyDeconstructReadableMap(parameters);
DynamicLink.Builder builder = getDynamicLinkBuilderFromMap(metaData);
Uri link = builder.buildDynamicLink().getUri();
Log.d(TAG, "created dynamic link: " + link.toString());
promise.resolve(link.toString());
DynamicLink.Builder builder = getDynamicLinkBuilder(linkData);
String link = builder.buildDynamicLink().getUri().toString();
Log.d(TAG, "created dynamic link: " + link);
promise.resolve(link);
} catch (Exception ex) {
Log.e(TAG, "create dynamic link failure " + ex.getMessage());
promise.reject("links/failure", ex.getMessage(), ex);
@@ -63,26 +57,31 @@ public class RNFirebaseLinks extends ReactContextBaseJavaModule implements Activ
}
@ReactMethod
public void createShortDynamicLink(final ReadableMap parameters, final Promise promise) {
public void createShortDynamicLink(final ReadableMap linkData, final String type, final Promise promise) {
try {
Map<String, Object> metaData = Utils.recursivelyDeconstructReadableMap(parameters);
DynamicLink.Builder builder = getDynamicLinkBuilder(linkData);
Task<ShortDynamicLink> shortLinkTask;
if ("SHORT".equals(type)) {
shortLinkTask = builder.buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
} else if ("UNGUESSABLE".equals(type)) {
shortLinkTask = builder.buildShortDynamicLink(ShortDynamicLink.Suffix.UNGUESSABLE);
} else {
shortLinkTask = builder.buildShortDynamicLink();
}
DynamicLink.Builder builder = getDynamicLinkBuilderFromMap(metaData);
Task<ShortDynamicLink> shortLinkTask = getShortDynamicLinkTask(builder, metaData)
.addOnCompleteListener(new OnCompleteListener<ShortDynamicLink>() {
shortLinkTask.addOnCompleteListener(new OnCompleteListener<ShortDynamicLink>() {
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task) {
if (task.isSuccessful()) {
Uri shortLink = task.getResult().getShortLink();
Log.d(TAG, "created short dynamic link: " + shortLink.toString());
promise.resolve(shortLink.toString());
} else {
Log.e(TAG, "create short dynamic link failure " + task.getException().getMessage());
promise.reject("links/failure", task.getException().getMessage(), task.getException());
}
}
});
if (task.isSuccessful()) {
String shortLink = task.getResult().getShortLink().toString();
Log.d(TAG, "created short dynamic link: " + shortLink);
promise.resolve(shortLink);
} else {
Log.e(TAG, "create short dynamic link failure " + task.getException().getMessage());
promise.reject("links/failure", task.getException().getMessage(), task.getException());
}
}
});
} catch (Exception ex) {
Log.e(TAG, "create short dynamic link failure " + ex.getMessage());
promise.reject("links/failure", ex.getMessage(), ex);
@@ -178,95 +177,122 @@ public class RNFirebaseLinks extends ReactContextBaseJavaModule implements Activ
return FirebaseAppInvite.getInvitation(pendingDynamicLinkData) != null;
}
private DynamicLink.Builder getDynamicLinkBuilderFromMap(final Map<String, Object> metaData) {
DynamicLink.Builder parametersBuilder = FirebaseDynamicLinks.getInstance().createDynamicLink();
private DynamicLink.Builder getDynamicLinkBuilder(final ReadableMap linkData) {
DynamicLink.Builder builder = FirebaseDynamicLinks.getInstance().createDynamicLink();
try {
parametersBuilder.setLink(Uri.parse((String) metaData.get("link")));
parametersBuilder.setDynamicLinkDomain((String) metaData.get("dynamicLinkDomain"));
setAndroidParameters(metaData, parametersBuilder);
setIosParameters(metaData, parametersBuilder);
setSocialMetaTagParameters(metaData, parametersBuilder);
builder.setLink(Uri.parse(linkData.getString("link")));
builder.setDynamicLinkDomain(linkData.getString("dynamicLinkDomain"));
setAnalyticsParameters(linkData.getMap("analytics"), builder);
setAndroidParameters(linkData.getMap("android"), builder);
setIosParameters(linkData.getMap("ios"), builder);
setITunesParameters(linkData.getMap("itunes"), builder);
setNavigationParameters(linkData.getMap("navigation"), builder);
setSocialParameters(linkData.getMap("social"), builder);
} catch (Exception e) {
Log.e(TAG, "error while building parameters " + e.getMessage());
throw e;
}
return parametersBuilder;
return builder;
}
private Task<ShortDynamicLink> getShortDynamicLinkTask(final DynamicLink.Builder builder, final Map<String, Object> metaData) {
Map<String, Object> suffix = (Map<String, Object>) metaData.get("suffix");
if (suffix != null) {
String option = (String) suffix.get("option");
if ("SHORT".equals(option)) {
return builder.buildShortDynamicLink(ShortDynamicLink.Suffix.SHORT);
} else if ("UNGUESSABLE".equals(option)) {
return builder.buildShortDynamicLink(ShortDynamicLink.Suffix.UNGUESSABLE);
}
private void setAnalyticsParameters(final ReadableMap analyticsData, final DynamicLink.Builder builder) {
DynamicLink.GoogleAnalyticsParameters.Builder analyticsParameters = new DynamicLink.GoogleAnalyticsParameters.Builder();
if (analyticsData.hasKey("campaign")) {
analyticsParameters.setCampaign(analyticsData.getString("campaign"));
}
return builder.buildShortDynamicLink();
if (analyticsData.hasKey("content")) {
analyticsParameters.setContent(analyticsData.getString("content"));
}
if (analyticsData.hasKey("medium")) {
analyticsParameters.setMedium(analyticsData.getString("medium"));
}
if (analyticsData.hasKey("source")) {
analyticsParameters.setSource(analyticsData.getString("source"));
}
if (analyticsData.hasKey("term")) {
analyticsParameters.setTerm(analyticsData.getString("term"));
}
builder.setGoogleAnalyticsParameters(analyticsParameters.build());
}
private void setAndroidParameters(final ReadableMap androidData, final DynamicLink.Builder builder) {
if (androidData.hasKey("packageName")) {
DynamicLink.AndroidParameters.Builder androidParameters = new DynamicLink.AndroidParameters.Builder(androidData.getString("packageName"));
private void setAndroidParameters(final Map<String, Object> metaData, final DynamicLink.Builder parametersBuilder) {
Map<String, Object> androidParameters = (Map<String, Object>) metaData.get("androidInfo");
if (androidParameters != null) {
DynamicLink.AndroidParameters.Builder androidParametersBuilder =
new DynamicLink.AndroidParameters.Builder((String) androidParameters.get("androidPackageName"));
if (androidParameters.containsKey("androidFallbackLink")) {
androidParametersBuilder.setFallbackUrl(Uri.parse((String) androidParameters.get("androidFallbackLink")));
if (androidData.hasKey("fallbackUrl")) {
androidParameters.setFallbackUrl(Uri.parse(androidData.getString("fallbackUrl")));
}
if (androidParameters.containsKey("androidMinPackageVersionCode")) {
androidParametersBuilder.setMinimumVersion(Integer.parseInt((String) androidParameters.get("androidMinPackageVersionCode")));
if (androidData.hasKey("minimumVersion")) {
androidParameters.setMinimumVersion(Integer.parseInt(androidData.getString("minimumVersion")));
}
parametersBuilder.setAndroidParameters(androidParametersBuilder.build());
builder.setAndroidParameters(androidParameters.build());
}
}
private void setIosParameters(final Map<String, Object> metaData, final DynamicLink.Builder parametersBuilder) {
Map<String, Object> iosParameters = (Map<String, Object>) metaData.get("iosInfo");
if (iosParameters != null) {
DynamicLink.IosParameters.Builder iosParametersBuilder =
new DynamicLink.IosParameters.Builder((String) iosParameters.get("iosBundleId"));
private void setIosParameters(final ReadableMap iosData, final DynamicLink.Builder builder) {
if (iosData.hasKey("bundleId")) {
DynamicLink.IosParameters.Builder iosParameters =
new DynamicLink.IosParameters.Builder(iosData.getString("bundleId"));
if (iosParameters.containsKey("iosAppStoreId")) {
iosParametersBuilder.setAppStoreId((String) iosParameters.get("iosAppStoreId"));
if (iosData.hasKey("appStoreId")) {
iosParameters.setAppStoreId(iosData.getString("appStoreId"));
}
if (iosParameters.containsKey("iosCustomScheme")) {
iosParametersBuilder.setCustomScheme((String) iosParameters.get("iosCustomScheme"));
if (iosData.hasKey("customScheme")) {
iosParameters.setCustomScheme(iosData.getString("customScheme"));
}
if (iosParameters.containsKey("iosFallbackLink")) {
iosParametersBuilder.setFallbackUrl(Uri.parse((String) iosParameters.get("iosFallbackLink")));
if (iosData.hasKey("fallbackUrl")) {
iosParameters.setFallbackUrl(Uri.parse(iosData.getString("fallbackUrl")));
}
if (iosParameters.containsKey("iosIpadBundleId")) {
iosParametersBuilder.setIpadBundleId((String) iosParameters.get("iosIpadBundleId"));
if (iosData.hasKey("iPadBundleId")) {
iosParameters.setIpadBundleId(iosData.getString("iPadBundleId"));
}
if (iosParameters.containsKey("iosIpadFallbackLink")) {
iosParametersBuilder.setIpadFallbackUrl(Uri.parse((String) iosParameters.get("iosIpadFallbackLink")));
if (iosData.hasKey("iPadFallbackUrl")) {
iosParameters.setIpadFallbackUrl(Uri.parse(iosData.getString("iPadFallbackUrl")));
}
if (iosParameters.containsKey("iosMinPackageVersionCode")) {
iosParametersBuilder.setMinimumVersion((String) iosParameters.get("iosMinPackageVersionCode"));
if (iosData.hasKey("minimumVersion")) {
iosParameters.setMinimumVersion(iosData.getString("minimumVersion"));
}
parametersBuilder.setIosParameters(iosParametersBuilder.build());
builder.setIosParameters(iosParameters.build());
}
}
private void setSocialMetaTagParameters(final Map<String, Object> metaData, final DynamicLink.Builder parametersBuilder) {
Map<String, Object> socialMetaTagParameters = (Map<String, Object>) metaData.get("socialMetaTagInfo");
if (socialMetaTagParameters != null) {
DynamicLink.SocialMetaTagParameters.Builder socialMetaTagParametersBuilder =
new DynamicLink.SocialMetaTagParameters.Builder();
private void setITunesParameters(final ReadableMap itunesData, final DynamicLink.Builder builder) {
DynamicLink.ItunesConnectAnalyticsParameters.Builder itunesParameters = new DynamicLink.ItunesConnectAnalyticsParameters.Builder();
if (socialMetaTagParameters.containsKey("socialDescription")) {
socialMetaTagParametersBuilder.setDescription((String) socialMetaTagParameters.get("socialDescription"));
}
if (socialMetaTagParameters.containsKey("socialImageLink")) {
socialMetaTagParametersBuilder.setImageUrl(Uri.parse((String) socialMetaTagParameters.get("socialImageLink")));
}
if (socialMetaTagParameters.containsKey("socialTitle")) {
socialMetaTagParametersBuilder.setTitle((String) socialMetaTagParameters.get("socialTitle"));
}
parametersBuilder.setSocialMetaTagParameters(socialMetaTagParametersBuilder.build());
if (itunesData.hasKey("affiliateToken")) {
itunesParameters.setAffiliateToken(itunesData.getString("affiliateToken"));
}
if (itunesData.hasKey("campaignToken")) {
itunesParameters.setCampaignToken(itunesData.getString("campaignToken"));
}
if (itunesData.hasKey("providerToken")) {
itunesParameters.setProviderToken(itunesData.getString("providerToken"));
}
builder.setItunesConnectAnalyticsParameters(itunesParameters.build());
}
private void setNavigationParameters(final ReadableMap navigationData, final DynamicLink.Builder builder) {
DynamicLink.NavigationInfoParameters.Builder navigationParameters = new DynamicLink.NavigationInfoParameters.Builder();
if (navigationData.hasKey("forcedRedirectEnabled")) {
navigationParameters.setForcedRedirectEnabled(navigationData.getBoolean("forcedRedirectEnabled"));
}
builder.setNavigationInfoParameters(navigationParameters.build());
}
private void setSocialParameters(final ReadableMap socialData, final DynamicLink.Builder builder) {
DynamicLink.SocialMetaTagParameters.Builder socialParameters = new DynamicLink.SocialMetaTagParameters.Builder();
if (socialData.hasKey("descriptionText")) {
socialParameters.setDescription(socialData.getString("descriptionText"));
}
if (socialData.hasKey("imageUrl")) {
socialParameters.setImageUrl(Uri.parse(socialData.getString("imageUrl")));
}
if (socialData.hasKey("title")) {
socialParameters.setTitle(socialData.getString("title"));
}
builder.setSocialMetaTagParameters(socialParameters.build());
}
}