This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
powersync-app/packaging/ios/pushnotifications.mm
Michael Zanetti 2ad3d8f74c fixes on iOS
2021-01-08 21:48:40 +01:00

106 lines
4.6 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#import "UIKit/UIKit.h"
#import <UserNotifications/UserNotifications.h>
// Include our C++ class
#include "pushnotifications.h"
#include <QDebug>
#import "Firebase/Firebase.h"
// This is hidden, so we declare it here to hook into it
@interface QIOSApplicationDelegate: UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate,FIRMessagingDelegate>
@end
//add a category to QIOSApplicationDelegate
@interface QIOSApplicationDelegate (APNSApplicationDelegate)
// No need to declare the methods here, since were overriding existing ones
@end
@implementation QIOSApplicationDelegate (APNSApplicationDelegate)
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Use Firebase library to configure APIs
[FIRApp configure];
[FIRMessaging messaging].delegate = self;
// Register to receive notifications from the system
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){
if(!error){
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
}];
NSLog(@"registering for remote notifications");
qDebug() << "Registering for remote notifications";
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"Did Register for Remote Notifications with Device Token (%@)", deviceToken);
const unsigned *tokenBytes = (const unsigned*)[deviceToken bytes];
NSString *tokenStr = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
// We've switched to firebase... Not emitting the native APNS token
// qDebug() << "Registering for remote notifications";
// qDebug() << "Token description:" << QString::fromNSString(deviceToken.description);
// qDebug() << "Parsed token:" << QString::fromNSString(tokenStr);
PushNotifications::instance()->setAPNSRegistrationToken(QString::fromNSString(tokenStr));
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Did Fail to Register for Remote Notifications");
NSLog(@"%@, %@", error, error.localizedDescription);
qWarning() << "Failed to register for notifications:" << QString::fromNSString(error.localizedDescription);
}
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{
NSLog(@"User Info : %@",notification.request.content.userInfo);
qDebug() << "willPresentNotification called!";
completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{
NSLog(@"User Info : %@",response.notification.request.content.userInfo);
qDebug() << "received notification response!";
completionHandler();
}
- (void)tokenRefreshNotification:(NSNotification *)notification {
NSLog(@"instanceId_notification=>%@",[notification object]);
NSString *InstanceID = [NSString stringWithFormat:@"%@",[notification object]];
qDebug() << "Notifation:" << QString::fromNSString(InstanceID);
}
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken {
NSLog(@"FCM registration token: %@", fcmToken);
// Notify about received token.
NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"];
[[NSNotificationCenter defaultCenter] postNotificationName:
@"FCMToken" object:nil userInfo:dataDict];
// Note: This callback is fired at each app startup and whenever a new token is generated.
//qDebug() << "Firebase token received:" << QString::fromNSString(fcmToken);
PushNotifications::instance()->setFirebaseRegistrationToken(QString::fromNSString(fcmToken));
}
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo {
qDebug() << "didReceiveRemoteNotification called";
}
@end