From 748e3fb53d484b1d01de628a01396e8ff74d60a0 Mon Sep 17 00:00:00 2001 From: Omer Levy Date: Mon, 25 Sep 2017 10:34:26 -0400 Subject: [PATCH] [ios] support dynamic links recieve --- ios/RNFirebase/RNFirebaseEvents.h | 3 + .../analytics/RNFirebaseAnalytics.h | 1 + ios/RNFirebase/links/RNFirebaseLinks.h | 5 +- ios/RNFirebase/links/RNFirebaseLinks.m | 60 +++++++++++++++++-- 4 files changed, 62 insertions(+), 7 deletions(-) diff --git a/ios/RNFirebase/RNFirebaseEvents.h b/ios/RNFirebase/RNFirebaseEvents.h index fd04c00a..218d929f 100644 --- a/ios/RNFirebase/RNFirebaseEvents.h +++ b/ios/RNFirebase/RNFirebaseEvents.h @@ -36,4 +36,7 @@ static NSString *const MESSAGING_NOTIFICATION_RECEIVED = @"messaging_notificatio static NSString *const ADMOB_INTERSTITIAL_EVENT = @"interstitial_event"; static NSString *const ADMOB_REWARDED_VIDEO_EVENT = @"rewarded_video_event"; +// Links +static NSString *const LINKS_DYNAMIC_LINK_RECEIVED = @"dynamic_link_received"; + #endif diff --git a/ios/RNFirebase/analytics/RNFirebaseAnalytics.h b/ios/RNFirebase/analytics/RNFirebaseAnalytics.h index da0c5bba..becef82a 100644 --- a/ios/RNFirebase/analytics/RNFirebaseAnalytics.h +++ b/ios/RNFirebase/analytics/RNFirebaseAnalytics.h @@ -4,6 +4,7 @@ #if __has_include() #import +#import @interface RNFirebaseAnalytics : NSObject { diff --git a/ios/RNFirebase/links/RNFirebaseLinks.h b/ios/RNFirebase/links/RNFirebaseLinks.h index 18be31ff..400386ff 100644 --- a/ios/RNFirebase/links/RNFirebaseLinks.h +++ b/ios/RNFirebase/links/RNFirebaseLinks.h @@ -5,11 +5,12 @@ #if __has_include() #import +#import -@interface RNFirebaseLinks : NSObject { +@interface RNFirebaseLinks : RCTEventEmitter { } - ++ (void)sendDynamicLink:(nonnull NSURL *)link; @end #else diff --git a/ios/RNFirebase/links/RNFirebaseLinks.m b/ios/RNFirebase/links/RNFirebaseLinks.m index 4c11d90d..abea48f1 100644 --- a/ios/RNFirebase/links/RNFirebaseLinks.m +++ b/ios/RNFirebase/links/RNFirebaseLinks.m @@ -2,13 +2,50 @@ #import "Firebase.h" #if __has_include() +#import "RNFirebaseEvents.h" @implementation RNFirebaseLinks RCT_EXPORT_MODULE(); -RCT_EXPORT_METHOD(createDynamicLink: (NSDictionary *) metadata resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - FIRDynamicLinkComponents *components = [self setDynamicLinkBuilderFromMap:metadata]; ++ (void)sendDynamicLink:(nonnull NSURL *)link { + [[NSNotificationCenter defaultCenter] postNotificationName:LINKS_DYNAMIC_LINK_RECEIVED object:self userInfo:@{@"link": link}]; +} + + +- (id)init { + self = [super init]; + if (self != nil) { + NSLog(@"Setting up RNFirebaseLinks instance"); + [self initialiseLinks]; + } + return self; +} + +- (void)initialiseLinks { + // Establish Firebase managed data channel + //[FIRMessaging messaging].shouldEstablishDirectChannel = YES; + + // Set up internal listener to send notification over bridge + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(sendEvent:) + name:LINKS_DYNAMIC_LINK_RECEIVED + object:nil]; + + // Set this as a delegate for FIRMessaging +// dispatch_async(dispatch_get_main_queue(), ^{ +// [FIRMessaging messaging].delegate = self; +// }); +} + +- (void)dealloc { + [[NSNotificationCenter defaultCenter] removeObserver:self]; +} + + +RCT_EXPORT_METHOD(createDynamicLink: (NSDictionary *) metadata resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + FIRDynamicLinkComponents *components = [self getDynamicLinkComponentsFromMetadata:metadata]; + if (components == nil) { reject(@"links/failure", @"error", nil); } else { @@ -19,8 +56,8 @@ RCT_EXPORT_METHOD(createDynamicLink: (NSDictionary *) metadata resolver:(RCTProm } RCT_EXPORT_METHOD(createShortDynamicLink: (NSDictionary *) metadata resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { - FIRDynamicLinkComponents *components = [self setDynamicLinkBuilderFromMap:metadata]; - + FIRDynamicLinkComponents *components = [self getDynamicLinkComponentsFromMetadata:metadata]; + [components shortenWithCompletion:^(NSURL *_Nullable shortURL, NSArray *_Nullable warnings, NSError *_Nullable error) { @@ -34,8 +71,12 @@ RCT_EXPORT_METHOD(createShortDynamicLink: (NSDictionary *) metadata resolver:(RC }]; } +RCT_EXPORT_METHOD(getInitialLink: (RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { + resolve(nil); +} -- (FIRDynamicLinkComponents *)setDynamicLinkBuilderFromMap:(NSDictionary *)metadata { + +- (FIRDynamicLinkComponents *)getDynamicLinkComponentsFromMetadata:(NSDictionary *)metadata { NSURL *link = [NSURL URLWithString:metadata[@"link"]]; FIRDynamicLinkComponents *components = [FIRDynamicLinkComponents componentsWithLink:link domain:metadata[@"dynamicLinkDomain"]]; @@ -175,6 +216,15 @@ RCT_EXPORT_METHOD(createShortDynamicLink: (NSDictionary *) metadata resolver:(RC } } +- (NSArray *)supportedEvents { + return @[LINKS_DYNAMIC_LINK_RECEIVED]; +} + +- (void)sendEvent:(NSNotification *)notification { + NSURL* dynamicLink = notification.userInfo[@"link"]; + [self sendEventWithName:LINKS_DYNAMIC_LINK_RECEIVED body:dynamicLink.absoluteString]; +} + @end #else