@@ -1,12 +1,15 @@
1#import "AppDelegate.h"
1#import "AppDelegate.h"
2#import "ViewController.h"
2#import "ViewController.h"
3+#import <UserNotifications/UserNotifications.h>
4−@interface AppDelegate ()
5+extern void didRegisterForRemoteNotificationsWithDeviceTokenCallback(HsStablePtr, const char * _Nonnull);
7+@interface AppDelegate ()
9HsStablePtr globalHandler = 0;
11HsStablePtr globalHandler = 0;
12+HsStablePtr globalDeviceTokenHook = 0;
11@implementation AppDelegate
14@implementation AppDelegate
@@ -16,6 +19,13 @@ HsStablePtr globalHandler = 0;
16 self.window.rootViewController = [[ViewController alloc] initWithHandler:globalHandler];
19 self.window.rootViewController = [[ViewController alloc] initWithHandler:globalHandler];
17 self.window.backgroundColor = [UIColor whiteColor];
20 self.window.backgroundColor = [UIColor whiteColor];
18 [self.window makeKeyAndVisible];
21 [self.window makeKeyAndVisible];
22+ UNUserNotificationCenter* center = [UNUserNotificationCenter currentNotificationCenter];
23+ [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert + UNAuthorizationOptionSound + UNAuthorizationOptionBadge)
24+ completionHandler:^(BOOL granted, NSError * _Nullable error) {
25+ // Handler used to alter application behavior based on types of notifications authorized
26+ // Perhaps we don't need to do anything here.
28+ [application registerForRemoteNotifications];
19 return YES;
29 return YES;
@@ -45,11 +55,17 @@ HsStablePtr globalHandler = 0;
45 // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
55 // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
58+- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
59+ NSString *deviceTokenString = [deviceToken base64EncodedStringWithOptions: 0];
60+ didRegisterForRemoteNotificationsWithDeviceTokenCallback(globalDeviceTokenHook, [deviceTokenString UTF8String]);
50−void runInWKWebView(HsStablePtr handler, const char * _Nonnull progName) {
65+void runInWKWebView(HsStablePtr handler, const char * _Nonnull progName, HsStablePtr deviceTokenHook) {
51 @autoreleasepool {
66 @autoreleasepool {
52 globalHandler = handler;
67 globalHandler = handler;
68+ globalDeviceTokenHook = deviceTokenHook;
53 const char * _Nonnull argv [] = {"", 0};
69 const char * _Nonnull argv [] = {"", 0};
54 UIApplicationMain(0, argv, nil, NSStringFromClass([AppDelegate class]));
70 UIApplicationMain(0, argv, nil, NSStringFromClass([AppDelegate class]));