mirror of
https://github.com/status-im/react-native-firebase.git
synced 2026-09-02 07:01:14 +00:00
[links] Refactor links to use builder classes
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user