From 0ad0085777456766c747310663339a3933e11b91 Mon Sep 17 00:00:00 2001 From: Karthik Date: Thu, 31 Jan 2019 16:37:07 +0530 Subject: [PATCH 1/6] fix dynamic link crash when creating shortlink if warnings are null --- .../firebasedynamiclinks/FirebaseDynamicLinksPlugin.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index 480e132de7d8..59ffa31cd0e0 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -96,8 +96,10 @@ public void onComplete(@NonNull Task task) { url.put("url", task.getResult().getShortLink().toString()); List warnings = new ArrayList<>(); - for (ShortDynamicLink.Warning warning : task.getResult().getWarnings()) { - warnings.add(warning.getMessage()); + if(task.getResult().getWarnings() != null) { + for (ShortDynamicLink.Warning warning : task.getResult().getWarnings()) { + warnings.add(warning.getMessage()); + } } url.put("warnings", warnings); From 7da07bf0f04d15e79c1cbe53f0a6c0f4857d2c74 Mon Sep 17 00:00:00 2001 From: Karthik Date: Sun, 3 Feb 2019 12:39:39 +0530 Subject: [PATCH 2/6] fix dynamic link crash when creating shortlink if warnings are null --- .../FirebaseDynamicLinksPlugin.java | 69 ++++++++++--------- 1 file changed, 35 insertions(+), 34 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index 59ffa31cd0e0..d42c96755429 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -28,7 +28,7 @@ private FirebaseDynamicLinksPlugin(Registrar registrar) { public static void registerWith(Registrar registrar) { final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_dynamic_links"); + new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_dynamic_links"); channel.setMethodCallHandler(new FirebaseDynamicLinksPlugin(registrar)); } @@ -61,30 +61,30 @@ public void onMethodCall(MethodCall call, Result result) { private void handleRetrieveDynamicLink(final Result result) { FirebaseDynamicLinks.getInstance() - .getDynamicLink(registrar.activity().getIntent()) - .addOnCompleteListener( - registrar.activity(), - new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - PendingDynamicLinkData data = task.getResult(); - if (data != null) { - Map dynamicLink = new HashMap<>(); - dynamicLink.put("link", data.getLink().toString()); - - Map androidData = new HashMap<>(); - androidData.put("clickTimestamp", data.getClickTimestamp()); - androidData.put("minimumVersion", data.getMinimumAppVersion()); - - dynamicLink.put("android", androidData); - result.success(dynamicLink); - return; - } - } - result.success(null); - } - }); + .getDynamicLink(registrar.activity().getIntent()) + .addOnCompleteListener( + registrar.activity(), + new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + PendingDynamicLinkData data = task.getResult(); + if (data != null) { + Map dynamicLink = new HashMap<>(); + dynamicLink.put("link", data.getLink().toString()); + + Map androidData = new HashMap<>(); + androidData.put("clickTimestamp", data.getClickTimestamp()); + androidData.put("minimumVersion", data.getMinimumAppVersion()); + + dynamicLink.put("android", androidData); + result.success(dynamicLink); + return; + } + } + result.success(null); + } + }); } private OnCompleteListener createShortLinkListener(final Result result) { @@ -101,6 +101,7 @@ public void onComplete(@NonNull Task task) { warnings.add(warning.getMessage()); } } + url.put("warnings", warnings); result.success(url); @@ -117,14 +118,14 @@ public void onComplete(@NonNull Task task) { } private void buildShortDynamicLink( - DynamicLink.Builder builder, MethodCall call, OnCompleteListener listener) { + DynamicLink.Builder builder, MethodCall call, OnCompleteListener listener) { Integer suffix = null; Map dynamicLinkParametersOptions = - call.argument("dynamicLinkParametersOptions"); + call.argument("dynamicLinkParametersOptions"); if (dynamicLinkParametersOptions != null) { Integer shortDynamicLinkPathLength = - (Integer) dynamicLinkParametersOptions.get("shortDynamicLinkPathLength"); + (Integer) dynamicLinkParametersOptions.get("shortDynamicLinkPathLength"); if (shortDynamicLinkPathLength != null) { switch (shortDynamicLinkPathLength) { case 0: @@ -162,7 +163,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { Integer minimumVersion = valueFor("minimumVersion", androidParameters); DynamicLink.AndroidParameters.Builder builder = - new DynamicLink.AndroidParameters.Builder(packageName); + new DynamicLink.AndroidParameters.Builder(packageName); if (fallbackUrl != null) builder.setFallbackUrl(Uri.parse(fallbackUrl)); if (minimumVersion != null) builder.setMinimumVersion(minimumVersion); @@ -179,7 +180,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { String term = valueFor("term", googleAnalyticsParameters); DynamicLink.GoogleAnalyticsParameters.Builder builder = - new DynamicLink.GoogleAnalyticsParameters.Builder(); + new DynamicLink.GoogleAnalyticsParameters.Builder(); if (campaign != null) builder.setCampaign(campaign); if (content != null) builder.setContent(content); @@ -213,14 +214,14 @@ private DynamicLink.Builder setupParameters(MethodCall call) { } Map itunesConnectAnalyticsParameters = - call.argument("itunesConnectAnalyticsParameters"); + call.argument("itunesConnectAnalyticsParameters"); if (itunesConnectAnalyticsParameters != null) { String affiliateToken = valueFor("affiliateToken", itunesConnectAnalyticsParameters); String campaignToken = valueFor("campaignToken", itunesConnectAnalyticsParameters); String providerToken = valueFor("providerToken", itunesConnectAnalyticsParameters); DynamicLink.ItunesConnectAnalyticsParameters.Builder builder = - new DynamicLink.ItunesConnectAnalyticsParameters.Builder(); + new DynamicLink.ItunesConnectAnalyticsParameters.Builder(); if (affiliateToken != null) builder.setAffiliateToken(affiliateToken); if (campaignToken != null) builder.setCampaignToken(campaignToken); @@ -234,7 +235,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { Boolean forcedRedirectEnabled = valueFor("forcedRedirectEnabled", navigationInfoParameters); DynamicLink.NavigationInfoParameters.Builder builder = - new DynamicLink.NavigationInfoParameters.Builder(); + new DynamicLink.NavigationInfoParameters.Builder(); if (forcedRedirectEnabled != null) builder.setForcedRedirectEnabled(forcedRedirectEnabled); @@ -248,7 +249,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { String title = valueFor("title", socialMetaTagParameters); DynamicLink.SocialMetaTagParameters.Builder builder = - new DynamicLink.SocialMetaTagParameters.Builder(); + new DynamicLink.SocialMetaTagParameters.Builder(); if (description != null) builder.setDescription(description); if (imageUrl != null) builder.setImageUrl(Uri.parse(imageUrl)); From 053d7f7750462226ce95f782daf62218a2690003 Mon Sep 17 00:00:00 2001 From: Karthik Date: Sun, 3 Feb 2019 12:55:09 +0530 Subject: [PATCH 3/6] fix dynamic link crash when creating shortlink if warnings are null --- .../FirebaseDynamicLinksPlugin.java | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java index d42c96755429..6116abd401e6 100644 --- a/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java +++ b/packages/firebase_dynamic_links/android/src/main/java/io/flutter/plugins/firebasedynamiclinks/FirebaseDynamicLinksPlugin.java @@ -28,7 +28,7 @@ private FirebaseDynamicLinksPlugin(Registrar registrar) { public static void registerWith(Registrar registrar) { final MethodChannel channel = - new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_dynamic_links"); + new MethodChannel(registrar.messenger(), "plugins.flutter.io/firebase_dynamic_links"); channel.setMethodCallHandler(new FirebaseDynamicLinksPlugin(registrar)); } @@ -61,30 +61,30 @@ public void onMethodCall(MethodCall call, Result result) { private void handleRetrieveDynamicLink(final Result result) { FirebaseDynamicLinks.getInstance() - .getDynamicLink(registrar.activity().getIntent()) - .addOnCompleteListener( - registrar.activity(), - new OnCompleteListener() { - @Override - public void onComplete(@NonNull Task task) { - if (task.isSuccessful()) { - PendingDynamicLinkData data = task.getResult(); - if (data != null) { - Map dynamicLink = new HashMap<>(); - dynamicLink.put("link", data.getLink().toString()); - - Map androidData = new HashMap<>(); - androidData.put("clickTimestamp", data.getClickTimestamp()); - androidData.put("minimumVersion", data.getMinimumAppVersion()); - - dynamicLink.put("android", androidData); - result.success(dynamicLink); - return; - } - } - result.success(null); - } - }); + .getDynamicLink(registrar.activity().getIntent()) + .addOnCompleteListener( + registrar.activity(), + new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (task.isSuccessful()) { + PendingDynamicLinkData data = task.getResult(); + if (data != null) { + Map dynamicLink = new HashMap<>(); + dynamicLink.put("link", data.getLink().toString()); + + Map androidData = new HashMap<>(); + androidData.put("clickTimestamp", data.getClickTimestamp()); + androidData.put("minimumVersion", data.getMinimumAppVersion()); + + dynamicLink.put("android", androidData); + result.success(dynamicLink); + return; + } + } + result.success(null); + } + }); } private OnCompleteListener createShortLinkListener(final Result result) { @@ -96,7 +96,7 @@ public void onComplete(@NonNull Task task) { url.put("url", task.getResult().getShortLink().toString()); List warnings = new ArrayList<>(); - if(task.getResult().getWarnings() != null) { + if (task.getResult().getWarnings() != null) { for (ShortDynamicLink.Warning warning : task.getResult().getWarnings()) { warnings.add(warning.getMessage()); } @@ -118,14 +118,14 @@ public void onComplete(@NonNull Task task) { } private void buildShortDynamicLink( - DynamicLink.Builder builder, MethodCall call, OnCompleteListener listener) { + DynamicLink.Builder builder, MethodCall call, OnCompleteListener listener) { Integer suffix = null; Map dynamicLinkParametersOptions = - call.argument("dynamicLinkParametersOptions"); + call.argument("dynamicLinkParametersOptions"); if (dynamicLinkParametersOptions != null) { Integer shortDynamicLinkPathLength = - (Integer) dynamicLinkParametersOptions.get("shortDynamicLinkPathLength"); + (Integer) dynamicLinkParametersOptions.get("shortDynamicLinkPathLength"); if (shortDynamicLinkPathLength != null) { switch (shortDynamicLinkPathLength) { case 0: @@ -163,7 +163,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { Integer minimumVersion = valueFor("minimumVersion", androidParameters); DynamicLink.AndroidParameters.Builder builder = - new DynamicLink.AndroidParameters.Builder(packageName); + new DynamicLink.AndroidParameters.Builder(packageName); if (fallbackUrl != null) builder.setFallbackUrl(Uri.parse(fallbackUrl)); if (minimumVersion != null) builder.setMinimumVersion(minimumVersion); @@ -180,7 +180,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { String term = valueFor("term", googleAnalyticsParameters); DynamicLink.GoogleAnalyticsParameters.Builder builder = - new DynamicLink.GoogleAnalyticsParameters.Builder(); + new DynamicLink.GoogleAnalyticsParameters.Builder(); if (campaign != null) builder.setCampaign(campaign); if (content != null) builder.setContent(content); @@ -214,14 +214,14 @@ private DynamicLink.Builder setupParameters(MethodCall call) { } Map itunesConnectAnalyticsParameters = - call.argument("itunesConnectAnalyticsParameters"); + call.argument("itunesConnectAnalyticsParameters"); if (itunesConnectAnalyticsParameters != null) { String affiliateToken = valueFor("affiliateToken", itunesConnectAnalyticsParameters); String campaignToken = valueFor("campaignToken", itunesConnectAnalyticsParameters); String providerToken = valueFor("providerToken", itunesConnectAnalyticsParameters); DynamicLink.ItunesConnectAnalyticsParameters.Builder builder = - new DynamicLink.ItunesConnectAnalyticsParameters.Builder(); + new DynamicLink.ItunesConnectAnalyticsParameters.Builder(); if (affiliateToken != null) builder.setAffiliateToken(affiliateToken); if (campaignToken != null) builder.setCampaignToken(campaignToken); @@ -235,7 +235,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { Boolean forcedRedirectEnabled = valueFor("forcedRedirectEnabled", navigationInfoParameters); DynamicLink.NavigationInfoParameters.Builder builder = - new DynamicLink.NavigationInfoParameters.Builder(); + new DynamicLink.NavigationInfoParameters.Builder(); if (forcedRedirectEnabled != null) builder.setForcedRedirectEnabled(forcedRedirectEnabled); @@ -249,7 +249,7 @@ private DynamicLink.Builder setupParameters(MethodCall call) { String title = valueFor("title", socialMetaTagParameters); DynamicLink.SocialMetaTagParameters.Builder builder = - new DynamicLink.SocialMetaTagParameters.Builder(); + new DynamicLink.SocialMetaTagParameters.Builder(); if (description != null) builder.setDescription(description); if (imageUrl != null) builder.setImageUrl(Uri.parse(imageUrl)); From 417def5704da44dbbb8eb94528ba6acf500409bb Mon Sep 17 00:00:00 2001 From: Karthik Date: Tue, 12 Feb 2019 08:57:21 +0530 Subject: [PATCH 4/6] ios crash if warnings are null --- .../ios/Classes/FirebaseDynamicLinksPlugin.m | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m index 4169e790b58e..e48acc98bb27 100644 --- a/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m @@ -113,6 +113,9 @@ - (FIRDynamicLinkShortenerCompletion)createShortLinkCompletion:(FlutterResult)re if (error) { result([error flutterError]); } else { + if(warnings == nil) { + warnings = [NSMutableArray array]; + } result(@{@"url" : [shortURL absoluteString], @"warnings" : warnings}); } }; @@ -147,8 +150,8 @@ - (FIRDynamicLinkComponents *)setupParameters:(NSDictionary *)arguments { NSURL *link = [NSURL URLWithString:arguments[@"link"]]; NSString *domain = arguments[@"domain"]; - FIRDynamicLinkComponents *components = [FIRDynamicLinkComponents componentsWithLink:link - domain:domain]; + FIRDynamicLinkComponents *components = + [FIRDynamicLinkComponents componentsWithLink:link domain:domain]; if (![arguments[@"androidParameters"] isEqual:[NSNull null]]) { NSDictionary *params = arguments[@"androidParameters"]; From c6e1d268e86ecfce97c8f1bd6e44dedc3c96e0da Mon Sep 17 00:00:00 2001 From: Karthik Date: Tue, 12 Feb 2019 19:17:55 +0530 Subject: [PATCH 5/6] ios crash if warnings are null --- .../ios/Classes/FirebaseDynamicLinksPlugin.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m index e48acc98bb27..1514c171f705 100644 --- a/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m @@ -113,8 +113,8 @@ - (FIRDynamicLinkShortenerCompletion)createShortLinkCompletion:(FlutterResult)re if (error) { result([error flutterError]); } else { - if(warnings == nil) { - warnings = [NSMutableArray array]; + if (warnings == nil) { + warnings = [NSMutableArray array]; } result(@{@"url" : [shortURL absoluteString], @"warnings" : warnings}); } From 02035d348807604de0da2a1a6c48fdcd58feea87 Mon Sep 17 00:00:00 2001 From: Maurice Parrish Date: Fri, 1 Mar 2019 12:28:58 -0800 Subject: [PATCH 6/6] Formatting --- .../ios/Classes/FirebaseDynamicLinksPlugin.m | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m b/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m index 1514c171f705..b258fdb3ee76 100644 --- a/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m +++ b/packages/firebase_dynamic_links/ios/Classes/FirebaseDynamicLinksPlugin.m @@ -150,8 +150,8 @@ - (FIRDynamicLinkComponents *)setupParameters:(NSDictionary *)arguments { NSURL *link = [NSURL URLWithString:arguments[@"link"]]; NSString *domain = arguments[@"domain"]; - FIRDynamicLinkComponents *components = - [FIRDynamicLinkComponents componentsWithLink:link domain:domain]; + FIRDynamicLinkComponents *components = [FIRDynamicLinkComponents componentsWithLink:link + domain:domain]; if (![arguments[@"androidParameters"] isEqual:[NSNull null]]) { NSDictionary *params = arguments[@"androidParameters"];