mirror of
https://github.com/selfxyz/self.git
synced 2026-02-19 02:24:25 -05:00
- Removed automatic notification permission request during app launch to prevent unwanted prompts; permissions will now be requested only when the user explicitly enables notifications. - Updated NSFaceIDUsageDescription in Info.plist for clarity on personal information storage.
108 lines
3.7 KiB
Plaintext
108 lines
3.7 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;
|
|
|
|
// NOTE: Notification permission request removed from app launch
|
|
// Permission is now requested only when user explicitly enables notifications
|
|
// (e.g., in Points screen or settings)
|
|
// The auto-request was causing unwanted permission prompts on first app launch
|
|
}
|
|
|
|
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
|