mirror of
https://github.com/selfxyz/self.git
synced 2026-04-05 03:00:53 -04:00
* chore: leave sandbox apns token comment * tweak entitlement * coderabbit ai feedback * firebase tweaks
121 lines
4.1 KiB
Plaintext
121 lines
4.1 KiB
Plaintext
// SPDX-License-Identifier: BUSL-1.1; Copyright (c) 2025 Social Connect Labs, Inc.; Licensed under BUSL-1.1 (see LICENSE); Apache-2.0 from 2029-06-11
|
|
|
|
#import "AppDelegate.h"
|
|
#import <React/RCTBundleURLProvider.h>
|
|
#import <React/RCTRootView.h>
|
|
#import <React/RCTBridge.h>
|
|
#import <React/RCTLinkingManager.h>
|
|
#import <Firebase.h>
|
|
#import <UserNotifications/UserNotifications.h>
|
|
#import <segment_analytics_react_native-Swift.h>
|
|
|
|
@implementation AppDelegate
|
|
|
|
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
|
{
|
|
[FIRApp configure];
|
|
|
|
if ([UNUserNotificationCenter class] != nil) {
|
|
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
|
center.delegate = self;
|
|
|
|
// Request permission for notifications
|
|
[center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge)
|
|
completionHandler:^(BOOL granted, NSError * _Nullable error) {
|
|
if (error) {
|
|
NSLog(@"Failed to request notification authorization: %@", error.localizedDescription);
|
|
return;
|
|
}
|
|
|
|
if (granted) {
|
|
NSLog(@"Notification authorization granted");
|
|
dispatch_async(dispatch_get_main_queue(), ^{
|
|
[[UIApplication sharedApplication] registerForRemoteNotifications];
|
|
});
|
|
} else {
|
|
NSLog(@"Notification authorization denied by user");
|
|
}
|
|
}];
|
|
}
|
|
|
|
self.moduleName = @"OpenPassport";
|
|
self.initialProps = @{};
|
|
|
|
return [super application:application didFinishLaunchingWithOptions:launchOptions];
|
|
}
|
|
|
|
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
|
{
|
|
return [self bundleURL];
|
|
}
|
|
|
|
- (NSURL *)bundleURL
|
|
{
|
|
#if DEBUG
|
|
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"];
|
|
#else
|
|
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
|
|
#endif
|
|
}
|
|
|
|
- (BOOL)application:(UIApplication *)application
|
|
continueUserActivity:(NSUserActivity *)userActivity
|
|
restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler
|
|
{
|
|
return [RCTLinkingManager application:application
|
|
continueUserActivity:userActivity
|
|
restorationHandler:restorationHandler];
|
|
}
|
|
|
|
// Handle device token registration
|
|
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
|
|
{
|
|
NSString *token = [self stringFromDeviceToken:deviceToken];
|
|
NSLog(@"APNs device token: %@", token);
|
|
|
|
#ifdef DEBUG
|
|
[[FIRMessaging messaging] setAPNSToken:deviceToken type:FIRMessagingAPNSTokenTypeSandbox];
|
|
#else
|
|
[[FIRMessaging messaging] setAPNSToken:deviceToken type:FIRMessagingAPNSTokenTypeProd];
|
|
#endif
|
|
}
|
|
|
|
// Handle device token registration errors
|
|
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
|
|
{
|
|
NSLog(@"Failed to register for remote notifications: %@", error);
|
|
}
|
|
|
|
// Handle notifications when app is in foreground
|
|
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
|
|
willPresentNotification:(UNNotification *)notification
|
|
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
|
|
{
|
|
// Display the notification in foreground
|
|
completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionBanner | UNNotificationPresentationOptionBadge);
|
|
}
|
|
|
|
// Convert device token to string format for logging
|
|
- (NSString *)stringFromDeviceToken:(NSData *)deviceToken
|
|
{
|
|
const unsigned char *tokenBuffer = (const unsigned char *)deviceToken.bytes;
|
|
NSMutableString *tokenString = [NSMutableString string];
|
|
|
|
for (NSUInteger i = 0; i < deviceToken.length; i++) {
|
|
[tokenString appendFormat:@"%02X", tokenBuffer[i]];
|
|
}
|
|
|
|
return [tokenString copy];
|
|
}
|
|
|
|
// for segment deep link tracking
|
|
- (BOOL)application:(UIApplication *)application
|
|
openURL: (NSURL *)url
|
|
options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options {
|
|
|
|
[AnalyticsReactNative trackDeepLink:url withOptions:options];
|
|
return YES;
|
|
}
|
|
|
|
@end
|