From 73cbc66bb96b348ec791e6854d6c24e6d85b2fa8 Mon Sep 17 00:00:00 2001 From: Jules Laplace Date: Tue, 26 Sep 2017 00:21:27 +0200 Subject: cordova-plugin-firebase --- .../src/ios/AppDelegate+FirebasePlugin.m | 132 +++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100755 StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m (limited to 'StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m') diff --git a/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m new file mode 100755 index 00000000..c4c45778 --- /dev/null +++ b/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m @@ -0,0 +1,132 @@ +#import "AppDelegate+FirebasePlugin.h" +#import "FirebasePlugin.h" +#import "Firebase.h" +#import + +#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 +@import UserNotifications; +#endif + +// Implement UNUserNotificationCenterDelegate to receive display notification via APNS for devices +// running iOS 10 and above. Implement FIRMessagingDelegate to receive data message via FCM for +// devices running iOS 10 and above. +#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 +@interface AppDelegate () +@end +#endif + +#define kApplicationInBackgroundKey @"applicationInBackground" + +@implementation AppDelegate (FirebasePlugin) + ++ (void)load { + Method original = class_getInstanceMethod(self, @selector(application:didFinishLaunchingWithOptions:)); + Method swizzled = class_getInstanceMethod(self, @selector(application:swizzledDidFinishLaunchingWithOptions:)); + method_exchangeImplementations(original, swizzled); +} + +- (void)setApplicationInBackground:(NSNumber *)applicationInBackground { + objc_setAssociatedObject(self, kApplicationInBackgroundKey, applicationInBackground, OBJC_ASSOCIATION_RETAIN_NONATOMIC); +} + +- (NSNumber *)applicationInBackground { + return objc_getAssociatedObject(self, kApplicationInBackgroundKey); +} + +- (BOOL)application:(UIApplication *)application swizzledDidFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + [self application:application swizzledDidFinishLaunchingWithOptions:launchOptions]; + + if(![FIRApp defaultApp]) { + [FIRApp configure]; + } + + [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tokenRefreshNotification:) + name:kFIRInstanceIDTokenRefreshNotification object:nil]; + + self.applicationInBackground = @(YES); + + return YES; +} + +- (void)applicationDidBecomeActive:(UIApplication *)application { + [self connectToFcm]; + self.applicationInBackground = @(NO); +} + +- (void)applicationDidEnterBackground:(UIApplication *)application { + [[FIRMessaging messaging] disconnect]; + self.applicationInBackground = @(YES); + NSLog(@"Disconnected from FCM"); +} + +- (void)tokenRefreshNotification:(NSNotification *)notification { + // Note that this callback will be fired everytime a new token is generated, including the first + // time. So if you need to retrieve the token as soon as it is available this is where that + // should be done. + NSString *refreshedToken = [[FIRInstanceID instanceID] token]; + NSLog(@"InstanceID token: %@", refreshedToken); + + // Connect to FCM since connection may have failed when attempted before having a token. + [self connectToFcm]; + + [FirebasePlugin.firebasePlugin sendToken:refreshedToken]; +} + +- (void)connectToFcm { + [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) { + if (error != nil) { + NSLog(@"Unable to connect to FCM. %@", error); + } else { + NSLog(@"Connected to FCM."); + NSString *refreshedToken = [[FIRInstanceID instanceID] token]; + NSLog(@"InstanceID token: %@", refreshedToken); + } + }]; +} + +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { + NSDictionary *mutableUserInfo = [userInfo mutableCopy]; + + [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"]; + + // Pring full message. + NSLog(@"%@", mutableUserInfo); + + [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo]; +} + +- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo + fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { + + NSDictionary *mutableUserInfo = [userInfo mutableCopy]; + + [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"]; + + // Pring full message. + NSLog(@"%@", mutableUserInfo); + + [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo]; +} + +#if defined(__IPHONE_10_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0 +- (void)userNotificationCenter:(UNUserNotificationCenter *)center + willPresentNotification:(UNNotification *)notification + withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { + NSDictionary *mutableUserInfo = [notification.request.content.userInfo mutableCopy]; + + [mutableUserInfo setValue:self.applicationInBackground forKey:@"tap"]; + + // Pring full message. + NSLog(@"%@", mutableUserInfo); + + [FirebasePlugin.firebasePlugin sendNotification:mutableUserInfo]; +} + +// Receive data message on iOS 10 devices. +- (void)applicationReceivedRemoteMessage:(FIRMessagingRemoteMessage *)remoteMessage { + // Print full message + NSLog(@"%@", [remoteMessage appData]); +} +#endif + +@end -- cgit v1.2.3-70-g09d2