1

Я использую UrbanAirship для обработки push-уведомления в моем приложении для iOS. Я хочу реализовать UAPushNotificationDelegate. Вот мой код в appdelegate.Делегат Urbanairship не работает

//Appdelegate.m 
UAConfig *config = [UAConfig defaultConfig]; 
[UAirship takeOff:config]; 

[[UAirship push] updateRegistration]; 
[UAirship push].userNotificationTypes = (UIUserNotificationTypeAlert | 
             UIUserNotificationTypeBadge | 
             UIUserNotificationTypeSound); 

[UAirship push].autobadgeEnabled = YES; 
[UAirship push].userPushNotificationsEnabled = YES; 
PushHandler *pushHandlerDelegate = [[PushHandler alloc] init]; 
[UAirship push].pushNotificationDelegate = pushHandlerDelegate; 

Вот мой PushHandler.h файл

// PushHandler.h 
@interface PushHandler : NSObject<UAPushNotificationDelegate> 

@end 

Тогда я реализовал методы UrbanAirship в моем файле реализации

- (void)receivedForegroundNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 
// Call the completion handler 
    completionHandler(UIBackgroundFetchResultNoData); 
} 
- (void)launchedFromNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{ 
// Call the completion handler 
    completionHandler(UIBackgroundFetchResultNoData); 
} 

- (void)launchedFromNotification:(NSDictionary *)notification actionIdentifier:(NSString *)identifier completionHandler:(void (^)())completionHandler { 
// Call the completion handler 
    completionHandler() 
} 

- (void)receivedBackgroundNotification:(NSDictionary *)notification actionIdentifier:(NSString *)identifier completionHandler:(void (^)())completionHandler { 
// Call the completion handler 
    completionHandler() 
} 

- (void)receivedBackgroundNotification:(NSDictionary *)notification fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 
// Call the completion handler 
    completionHandler(UIBackgroundFetchResultNoData); 
} 

Но не из функций вызова, когда я получаю толчок. Где я поступаю неправильно?

+0

Привет. Вы нашли решение? –

ответ

1

UAPush хранит слабую ссылку на делегата. Вам нужно хранить сильную ссылку где-то в вашем коде.

Пример:

@interface AppDelegate() 
@property(nonatomic, strong) PushHandler *pushHandlerDelegate; 
@end 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    ... 

    self.pushHandlerDelegate = [[PushHandler alloc] init]; 
    [UAirship push].pushNotificationDelegate = self.pushHandlerDelegate; 
} 
+1

Привет .. Спасибо за ваш ответ, но все же я могу получить доступ только к уведомлению переднего плана. Когда приложение находится в фоновом режиме, я не могу получить нажатие, Push получает, но он не запускает метод «receivedBackgroundNotification:». –

+0

APNS только пробуждает приложение, если вы отправляете доступный контент, и если включены удаленные уведомления. Также убедитесь, что обновление фона включено, и вы не убили приложение через переключатель задач. – ralepinski

Смежные вопросы