После интеграции OneSignal Cordova SDK мои методы делегата приложения не вызываются для UNUserNotificationCenterDelegate - PullRequest
1 голос
/ 14 февраля 2020
#import "AppDelegate.h"
#import <UserNotifications/UserNotifications.h>
#import "MainViewController.h"

@interface AppDelegate () <UNUserNotificationCenterDelegate>

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
    self.viewController = [[MainViewController alloc] init];
    [self registerForNotification];
    return [super application:application didFinishLaunchingWithOptions:launchOptions];
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification*)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
  // This method are not getting called
completionHandler(UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound);
}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(nonnull UNNotificationResponse* )response withCompletionHandler:(nonnull void (^)(void))completionHandler {
   // This method are not getting called
    NSDictionary *userInfo =  response.notification.request.content.userInfo;
    completionHandler();
}


- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"DEVICE_TOKEN :: %@", deviceToken);

    const unsigned *tokenBytes = [deviceToken bytes];
    NSString *hexToken = [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])];

    NSString *apnDeviceToken = hexToken;
    NSLog(@"APN_DEVICE_TOKEN :: %@", apnDeviceToken);
}


-(void)registerForNotification
{
    if(@available(iOS 10.0, *))
    {
        UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
        center.delegate = self;
        [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error)
         {
             if(!error)
             {
                 dispatch_async(dispatch_get_main_queue(), ^ {
                     [[UIApplication sharedApplication] registerForRemoteNotifications];  // required to get the app to do anything at all about push notifications
                     NSLog(@"Push registration success." );
                 });
             }
             else
             {
                 NSLog(@"Push registration FAILED" );
                 NSLog(@"ERROR: %@ - %@", error.localizedFailureReason, error.localizedDescription );
                 NSLog(@"SUGGESTIONS: %@ - %@", error.localizedRecoveryOptions, error.localizedRecoverySuggestion );
             }
         }];
    }

}

@end

didReceiveNotificationResponse и willPresentNotification не сработали. Я не могу обработать уведомление других APNS, которое не относится к одному сигналу. Уведомление SDK плагина Cordova.

Есть ли способ, которым методы делегирования моего приложения для методов делегирования UserNotifications будут вызываться в Cordova ios, когда один Используется плагин сигнала?

Я подозреваю, что из-за быстрого перебора методов делегата приложения обратные вызовы одного сигнала не запускаются в исходном файле Appdelegate.

Пожалуйста, помогите нам, если у нас есть какой-либо другой способ получить мое приложение делегат триггера методов делегирования UserNotifications.

Поскольку один сигнал использует платформы stati c в Cordova, нет способа изменить код внутри плагина.

Это единственный сигнал плагин для Cordova github https://github.com/OneSignal/OneSignal-Cordova-SDK

...