Jesse Onolemen
Jesse Onolemen

Reputation: 1325

iOS Local Notification - Action on Click

So I have managed to set up local notification in my app by doing so.

NSDate *notifTime = [[NSDate date] dateByAddingTimeInterval:time];
UIApplication *app = [UIApplication sharedApplication];
UILocalNotification *notif = [[UILocalNotification alloc] init];

if (notif) {
    notif.fireDate = notifTime;
    notif.timeZone = [NSTimeZone defaultTimeZone];
    notif.repeatInterval = 0;
    notif.alertTitle = title;
    notif.alertBody = text;

    if (sound == nil) {

        NSLog(@"default sound");
    }

    else {

        NSLog(@"other sound");
        notif.soundName = sound;
    };


    [app scheduleLocalNotification:notif];
}

inside of a method that is called

- (void)createDateNotification:(NSString*) title alertText: (NSString*)text timeToWait: (NSTimeInterval)time soundToPlay: (NSString*)sound;

and when I call that method, The notification runs just like expected. My problem is that in my game I want it to be when the user clickes on the local notification that it will run a method which now just does so

-(void)rewardUser {

NSLog(@"User rewarded")

}

but sometimes it may run a different method and I don't know how do do it. Anything from swift to objective c will be appreciated. Much thanks!

Upvotes: 1

Views: 2608

Answers (2)

Jesse Onolemen
Jesse Onolemen

Reputation: 1325

I managed to solve it by doing this. When creating the alert, I set the action to a public string in my class which is called action and as @songchenwen mentioned, I overrided the didReceiveLocalNotification to check if the action is equal to a number of variables and if so run a method for each one.

I called the mothod like this setting a string for the action

 [self createReminderNotification:@"Give50Coins" messageTitle:@"t" messageBody:@"gfdhgsh" timeToWait:2 soundToPlay:@"audio.wav"];

And in the method I initialised the notification setting all the details.

NSDate *notifTime = [[NSDate date] dateByAddingTimeInterval:time];
UIApplication *app = [UIApplication sharedApplication];
UILocalNotification *notif = [[UILocalNotification alloc] init];

action = actionAfterNotifiy;

if (notif) {

    notif.fireDate = notifTime;
    notif.timeZone = [NSTimeZone defaultTimeZone];
    notif.repeatInterval = 0;
    notif.alertTitle = title;
    notif.alertBody = message;

    if (sound == nil) {

        NSLog(@"default sound");
    }

    else {

        NSLog(@"other sound");
    };

}

[app scheduleLocalNotification: notif];

and in the - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification

I did this,

-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

if ([action isEqualToString:@"Give50Coins"]) {

    NSLog(@"wheyy");
}
 else {
  //random stuff here
}
}

Upvotes: 0

songchenwen
songchenwen

Reputation: 1362

Override - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification*)notification in your AppDelegate and do your thing.

Upvotes: 1

Related Questions