2015-09-02 2 views
1

Я с этим разоблачаю голову перед столом. Я знаю, что это было задано раньше, но я действительно не понимаю, в чем проблема с моим кодом.Кнопки не отображаются на локальном интерактивном уведомлении в iOS.

Вот код, который я использую для регистрации и отправки интерактивных уведомлений.

Заранее спасибо.

#define kNotificationActionNo @"ActionKeyNo" 
#define kNotificationActionYes @"ActionKeyYes" 
#define kNotificationCategoryVendingMachine @"VendingMachineNotification" 

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

    [self registerForNotification]; 

    ... 
} 

+ (void)sendLocalNotification:(NSString*)message info:(NSDictionary*)infoDict { 
    UILocalNotification *localNotification = [[UILocalNotification alloc] init]; 
    localNotification.alertBody = message; 
    localNotification.fireDate = [NSDate date]; 
    localNotification.soundName = UILocalNotificationDefaultSoundName; 
    localNotification.category = kNotificationCategoryVendingMachine; 
    localNotification.userInfo = infoDict; 
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
} 

- (void)registerForNotification { 

    UIMutableUserNotificationAction *action1; 
    action1 = [[UIMutableUserNotificationAction alloc] init]; 
    [action1 setActivationMode:UIUserNotificationActivationModeBackground]; 
    [action1 setTitle:NSLocalizedString(@"YES_LEGEND", nil)]; 
    [action1 setIdentifier:kNotificationActionYes]; 
    [action1 setDestructive:NO]; 
    [action1 setAuthenticationRequired:NO]; 

    UIMutableUserNotificationAction *action2; 
    action2 = [[UIMutableUserNotificationAction alloc] init]; 
    [action2 setActivationMode:UIUserNotificationActivationModeBackground]; 
    [action2 setTitle:NSLocalizedString(@"NO_LEGEND", nil)]; 
    [action2 setIdentifier:kNotificationActionNo]; 
    [action2 setDestructive:NO]; 
    [action2 setAuthenticationRequired:NO]; 

    UIMutableUserNotificationCategory *actionCategory; 
    actionCategory = [[UIMutableUserNotificationCategory alloc] init]; 
    [actionCategory setIdentifier:kNotificationCategoryVendingMachine]; 
    [actionCategory setActions:@[action1, action2] 
        forContext:UIUserNotificationActionContextDefault]; 

    NSSet *categories = [NSSet setWithObject:actionCategory]; 
    UIUserNotificationType types = (UIUserNotificationTypeAlert| 
            UIUserNotificationTypeSound| 
            UIUserNotificationTypeBadge); 

    UIUserNotificationSettings *settings; 
    settings = [UIUserNotificationSettings settingsForTypes:types 
               categories:categories]; 

    [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 
} 
+0

http://stackoverflow.com/questions/29817994/ios-8-interactive-notifications-not-showing-actions/37984024 # 37984024 – Zaraki

ответ

1

Ну первое, что первое,

Я не вижу, что вы на самом деле вызова метода sendLocalNotification где-нибудь в вашем методе didFinishLaunchingWithOptions:. Вы должны позвонить ему, чтобы увидеть, действительно ли он срабатывает, потому что эстетически вы сделали все, что вы должны были сделать, чтобы настроить уведомление на основе категорий. kudos и хорошо написано для новичков в StackOverflow. Кроме того, если вы вызываете его, и вы просто просто опустили его из вопроса, то ваша проблема, вероятно, заключается в том, как вы устанавливаете свой метод. На данный момент это метод класса, если его цель или нет, я не уверен, однако, моя точка зрения, если она не работает, и Уведомления - это, показывающие, только не действия категории, тогда вам следует, вероятно, правильно назовите его или измените его на метод экземпляра.

See the difference between the two here


Вы так близки. У вас было все настроено правильно, а затем качалось в конце. Вы должны назвать ваш sendLocalNotification так:

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

    [self sendLocalNotification:@"Estas cerca de una máquina expendedora. ¿Quieres realizar una compra?" info:@{@"type":@"near_vending"}]; 

} 

и изменить способ, чтобы правильно отражать то, какой метод он. Я включил ссылку выше, чтобы показать вам разницу. Задают его так:

-(void)sendLocalNotification: 

НЕ

+(void)sendLocalNotification: 
+0

Я использую его, я просто не писал, где. Дело в том, что уведомления показываются, но действия категории отсутствуют. – Ranbeuer

+0

показать, как вы вызываете метод, пожалуйста, потому что, как я сказал в своем ответе, ваш настрой его как метод класса прямо сейчас @Ranbeuer – soulshined

+0

Я использовал его вот так: '[AppDelegate sendLocalNotification: @" Estas cerca de una máquina expendedora. ¿Quieres realizar una compra? " info: @ {@ "type": @ "near_vending"}]; ' Я изменил его на метод экземпляра, и теперь я использую его следующим образом: ' [app sendLocalNotification: @ "Estas cerca de una máquina expendora. ¿Quieres realizar una compra? " info: @ {@ "type": @ "near_vending"}]; ' Нет никакой разницы между ними. – Ranbeuer

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