[invites] iOS getInitialInvitation and onInvitation functionality
This commit is contained in:
parent
54b419dfcf
commit
d1d53a442d
@ -14,10 +14,11 @@
|
|||||||
@property _Nullable RCTPromiseRejectBlock invitationsRejecter;
|
@property _Nullable RCTPromiseRejectBlock invitationsRejecter;
|
||||||
@property _Nullable RCTPromiseResolveBlock invitationsResolver;
|
@property _Nullable RCTPromiseResolveBlock invitationsResolver;
|
||||||
|
|
||||||
#if !TARGET_OS_TV
|
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options;
|
||||||
- (void)didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo;
|
|
||||||
- (void)didRegisterUserNotificationSettings:(nonnull UIUserNotificationSettings *)notificationSettings;
|
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
|
||||||
#endif
|
|
||||||
|
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *))restorationHandler;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@ -27,3 +28,4 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#if __has_include(<FirebaseInvites/FirebaseInvites.h>)
|
#if __has_include(<FirebaseInvites/FirebaseInvites.h>)
|
||||||
#import "RNFirebaseEvents.h"
|
#import "RNFirebaseEvents.h"
|
||||||
|
#import "RNFirebaseUtil.h"
|
||||||
#import <FirebaseInvites/FirebaseInvites.h>
|
#import <FirebaseInvites/FirebaseInvites.h>
|
||||||
|
|
||||||
#import <React/RCTEventDispatcher.h>
|
#import <React/RCTEventDispatcher.h>
|
||||||
@ -32,21 +33,34 @@ RCT_EXPORT_MODULE()
|
|||||||
// ** Start AppDelegate methods
|
// ** Start AppDelegate methods
|
||||||
// *******************************************************
|
// *******************************************************
|
||||||
|
|
||||||
// Listen for permission response
|
- (BOOL)application:(UIApplication *)app
|
||||||
- (void) didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
|
openURL:(NSURL *)url
|
||||||
|
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
|
||||||
|
return [self application:app
|
||||||
|
openURL:url
|
||||||
|
sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]
|
||||||
|
annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Listen for FCM data messages that arrive as a remote notification
|
- (BOOL)application:(UIApplication *)application
|
||||||
- (void)didReceiveRemoteNotification:(nonnull NSDictionary *)userInfo {
|
openURL:(NSURL *)url
|
||||||
|
sourceApplication:(NSString *)sourceApplication
|
||||||
|
annotation:(id)annotation {
|
||||||
|
return [self handleUrl:url];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (BOOL)application:(UIApplication *)application
|
||||||
|
continueUserActivity:(NSUserActivity *)userActivity
|
||||||
|
restorationHandler:(void (^)(NSArray *))restorationHandler {
|
||||||
|
if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
|
||||||
|
return [self handleUrl:userActivity.webpageURL];
|
||||||
|
}
|
||||||
|
return NO;
|
||||||
|
}
|
||||||
// *******************************************************
|
// *******************************************************
|
||||||
// ** Finish AppDelegate methods
|
// ** Finish AppDelegate methods
|
||||||
// *******************************************************
|
// *******************************************************
|
||||||
|
|
||||||
|
|
||||||
// *******************************************************
|
// *******************************************************
|
||||||
// ** Start FIRInviteDelegate methods
|
// ** Start FIRInviteDelegate methods
|
||||||
// *******************************************************
|
// *******************************************************
|
||||||
@ -54,9 +68,13 @@ RCT_EXPORT_MODULE()
|
|||||||
// Listen for invitation response
|
// Listen for invitation response
|
||||||
- (void)inviteFinishedWithInvitations:(NSArray *)invitationIds error:(NSError *)error {
|
- (void)inviteFinishedWithInvitations:(NSArray *)invitationIds error:(NSError *)error {
|
||||||
if (error) {
|
if (error) {
|
||||||
_invitationsRejecter(@"invites/invitation-error", @"Invitation failed to send", error);
|
if (error.code == -402) {
|
||||||
} else if (invitationIds.count == 0) {
|
_invitationsRejecter(@"invites/invitation-cancelled", @"Invitation cancelled", nil);
|
||||||
_invitationsRejecter(@"invites/invitation-cancelled", @"Invitation cancelled", nil);
|
} else if (error.code == -404) {
|
||||||
|
_invitationsRejecter(@"invites/invitation-error", @"User must be signed in with GoogleSignIn", nil);
|
||||||
|
} else {
|
||||||
|
_invitationsRejecter(@"invites/invitation-error", @"Invitation failed to send", error);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_invitationsResolver(invitationIds);
|
_invitationsResolver(invitationIds);
|
||||||
}
|
}
|
||||||
@ -70,13 +88,40 @@ RCT_EXPORT_MODULE()
|
|||||||
|
|
||||||
// ** Start React Module methods **
|
// ** Start React Module methods **
|
||||||
RCT_EXPORT_METHOD(getInitialInvitation:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
RCT_EXPORT_METHOD(getInitialInvitation:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) {
|
||||||
// TODO
|
NSURL* url = nil;
|
||||||
resolve(nil);
|
if (self.bridge.launchOptions[UIApplicationLaunchOptionsURLKey]) {
|
||||||
|
url = (NSURL*)self.bridge.launchOptions[UIApplicationLaunchOptionsURLKey];
|
||||||
|
} else if (self.bridge.launchOptions[UIApplicationLaunchOptionsUserActivityDictionaryKey]) {
|
||||||
|
NSDictionary *dictionary =
|
||||||
|
self.bridge.launchOptions[UIApplicationLaunchOptionsUserActivityDictionaryKey];
|
||||||
|
if ([dictionary[UIApplicationLaunchOptionsUserActivityTypeKey] isEqual:NSUserActivityTypeBrowsingWeb]) {
|
||||||
|
NSUserActivity* userActivity = (NSUserActivity*) dictionary[@"UIApplicationLaunchOptionsUserActivityKey"];
|
||||||
|
url = userActivity.webpageURL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (url) {
|
||||||
|
[FIRInvites handleUniversalLink:url completion:^(FIRReceivedInvite * _Nullable receivedInvite, NSError * _Nullable error) {
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"Failed to handle universal link: %@", [error localizedDescription]);
|
||||||
|
reject(@"invites/initial-invitation-error", @"Failed to handle invitation", error);
|
||||||
|
} else if (receivedInvite) {
|
||||||
|
resolve(@{
|
||||||
|
@"deepLink": receivedInvite.deepLink,
|
||||||
|
@"invitationId": receivedInvite.inviteId,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
resolve(nil);
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
} else {
|
||||||
|
resolve(nil);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RCT_EXPORT_METHOD(sendInvitation:(NSDictionary *) invitation
|
RCT_EXPORT_METHOD(sendInvitation:(NSDictionary *) invitation
|
||||||
resolve:(RCTPromiseResolveBlock) resolve
|
resolve:(RCTPromiseResolveBlock) resolve
|
||||||
reject:(RCTPromiseRejectBlock) reject) {
|
reject:(RCTPromiseRejectBlock) reject) {
|
||||||
if (!invitation[@"message"]) {
|
if (!invitation[@"message"]) {
|
||||||
reject(@"invites/invalid-invitation", @"The supplied invitation is missing a 'message' field", nil);
|
reject(@"invites/invalid-invitation", @"The supplied invitation is missing a 'message' field", nil);
|
||||||
}
|
}
|
||||||
@ -111,10 +156,25 @@ RCT_EXPORT_METHOD(sendInvitation:(NSDictionary *) invitation
|
|||||||
_invitationsResolver = resolve;
|
_invitationsResolver = resolve;
|
||||||
|
|
||||||
// Open the invitation dialog
|
// Open the invitation dialog
|
||||||
[inviteDialog open];
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
|
[inviteDialog open];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// ** Start internals **
|
// ** Start internals **
|
||||||
|
- (BOOL)handleUrl:(NSURL *)url {
|
||||||
|
return [FIRInvites handleUniversalLink:url completion:^(FIRReceivedInvite * _Nullable receivedInvite, NSError * _Nullable error) {
|
||||||
|
if (error) {
|
||||||
|
NSLog(@"Failed to handle invitation: %@", [error localizedDescription]);
|
||||||
|
} else if (receivedInvite) {
|
||||||
|
[RNFirebaseUtil sendJSEvent:self name:LINKS_LINK_RECEIVED body:@{
|
||||||
|
@"deepLink": receivedInvite.deepLink,
|
||||||
|
@"invitationId": receivedInvite.inviteId,
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
- (NSArray<NSString *> *)supportedEvents {
|
- (NSArray<NSString *> *)supportedEvents {
|
||||||
return @[INVITES_INVITATION_RECEIVED];
|
return @[INVITES_INVITATION_RECEIVED];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user