每 28 天生成一次本地通知 iOS 10 Objective-C [英] Generate Local Notification For every 28 days iOS 10 Objective-C

查看:73
本文介绍了每 28 天生成一次本地通知 iOS 10 Objective-C的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须每 28 天生成一次本地通知,即用户将在特定日期注册我需要在该注册日期的 28 天后生成本地通知,然后我需要重复生成该本地通知每 28 天通知一次.

I have to generate a local notification for every 28 days,i.e the user will register on a particular date i need to generate a Local notification exactly after 28 days form that registration date,and from then i need to repeatedly generate that local notification for every 28 days.

推荐答案

从这里检查接受的答案:如何在 iOS 10 (objective-c) 中安排本地通知

Check accepted answer from here : How to schedule a local notification in iOS 10 (objective-c)

  1. 试试吧.它已弃用但有效的代码.在 iOS 10.0 之前使用它:

  1. Try it. Its deprecated but working code. Use it for Before iOS 10.0 :

//Get all previous noti..
 NSLog(@"scheduled notifications: --%@----", [[UIApplication sharedApplication] scheduledLocalNotifications]);

 NSDate *now = [NSDate date];
 now = [now dateByAddingTimeInterval:60*60*24*7]; //7 for 7th day of the week.
 NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

[calendar setTimeZone:[NSTimeZone localTimeZone]];
 NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit fromDate:now];


 NSDate *SetAlarmAt = [calendar dateFromComponents:components];


 UILocalNotification *localNotification = [[UILocalNotification alloc] init];

 localNotification.fireDate = SetAlarmAt;


 NSLog(@"FIRE DATE --%@----",[SetAlarmAt description]);

 localNotification.alertBody =@"Alert";

 localNotification.alertAction = [NSString stringWithFormat:@"My test for Weekly alarm"];

 localNotification.userInfo = @{
                           @"alarmID":[NSString stringWithFormat:@"123"],
                           @"SOUND_TYPE":[NSString stringWithFormat:@"hello.mp3"]
                           };

  localNotification.repeatInterval=0; //[NSCalendar currentCalendar];


  [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

  1. 对于 iOS 10.0 及更高版本:现在尝试使用 UserNotifications 框架:添加框架,然后像 #import 一样导入.在 Appdelegate Didfinishluanch 方法中.

  1. For iOS 10.0 and later: Now try with UserNotifications framework: Add the framework, and import like #import . In Appdelegate Didfinishluanch method.

UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert)
              completionHandler:^(BOOL granted, NSError * _Nullable error) {
                  if (!error) {
                      NSLog(@"request succeeded!");
                      [self testAlrt];
                  }
              }];

在您的 ibaction 或方法中,编写并测试:

In your ibaction or method, write it and test:

 NSDate *now = [NSDate date];

// NSLog(@"NSDate--before:%@",now);

now = [now dateByAddingTimeInterval:60*60*24*7];

NSLog(@"NSDate:%@",now);

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

[calendar setTimeZone:[NSTimeZone localTimeZone]];

NSDateComponents *components = [calendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit|NSTimeZoneCalendarUnit fromDate:now];

NSDate *todaySehri = [calendar dateFromComponents:components]; //unused



UNMutableNotificationContent *objNotificationContent = [[UNMutableNotificationContent alloc] init];
objNotificationContent.title = [NSString localizedUserNotificationStringForKey:@"Notification!" arguments:nil];
objNotificationContent.body = [NSString localizedUserNotificationStringForKey:@"This is local notification message!"
                                                                    arguments:nil];
objNotificationContent.sound = [UNNotificationSound defaultSound];

/// 4. update application icon badge number
objNotificationContent.badge = @([[UIApplication sharedApplication] applicationIconBadgeNumber] + 1);


UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO];


UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"ten"
                                                                      content:objNotificationContent trigger:trigger];
/// 3. schedule localNotification
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
[center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
    if (!error) {
        NSLog(@"Local Notification succeeded");
    }
    else {
        NSLog(@"Local Notification failed");
    }
}];

这篇关于每 28 天生成一次本地通知 iOS 10 Objective-C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆