summaryrefslogtreecommitdiff
path: root/StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m
diff options
context:
space:
mode:
Diffstat (limited to 'StoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m')
-rwxr-xr-xStoneIsland/plugins/cordova-plugin-firebase/src/ios/AppDelegate+FirebasePlugin.m132
1 files changed, 132 insertions, 0 deletions
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 <objc/runtime.h>
+
+#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 () <UNUserNotificationCenterDelegate, FIRMessagingDelegate>
+@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