随着公司APP开发的相继完善,大家总有一天会接触到推送.
推送分两种:
1.本地推送
2.远程推送
---------------一条华丽的分割线--------------------------
本地推送
这篇给大家讲的是有关本地推送的最基础的用法.(因为楼主也只懂点皮毛.#)
本地推送,市面上许多APP都有用到.
正常都用在提醒用户来使用该APP的.
好久没用某APP的时候,通知中心就会跳出"客官,您已经一星期没玩我了,快来玩玩我吧!"之类的一些`牛盲~通知.(捂脸状)
Like this⬇️
整理下发型,直接上代码.
这篇本地推送写的那是相当的详细~.
请各位客官尽情的command+c+v吧.
首先~控制器里创建本地推送的代码.
(其实只需要1,2,3,4就可发送一则推送通知,其他都是废话0.0)
- (void)messageClick2:(UIBarButtonItem *)btn
{
// 1.创建本地通知
UILocalNotification *note = [[UILocalNotification alloc]init];
// 2.设置通知的消息
note.alertBody = @"客官,您已经一个星期没玩我了,快来玩玩我吧!";
// 3.设置时间
// note.fireDate = [NSDate dateWithTimeIntervalSince1970:3*60*60+7*60];// 每日提醒的时间是从早上8点开始的
note.fireDate = [NSDate dateWithTimeIntervalSinceNow:2];// 从现在起 两秒钟之后
// 4.添加通知 添加 通知,不是直接发出通知
[[UIApplication sharedApplication] scheduleLocalNotification:note];
// 这边以上即可发送一则本地推送通知,下面只是完善.
/***********************一条华丽的分割线************************/
// 时区
note.timeZone = [NSTimeZone defaultTimeZone];
// 重复
note.repeatInterval = kCFCalendarUnitDay;// 每日 ,当然也可以调成每小时之类的.也可填数字,重复次数.
// 角标
note.applicationIconBadgeNumber = 1;
// 设置当点击通知进程序的时候 启动,启动屏幕 如果图片找不到会显示默认的启动图片.但是好像ios9.0以后就失效了.
note.alertLaunchImage = @"图片名称";
// 这个锁屏状态是不会显示的,只对通知中心有效.ios8.2之后有效!!!
note.alertTitle = @"MYAPP";
// 滑动的时候 显示的字
note.alertAction = @"回复";
//这个是控制上面的显示不显示的 正常就是默认状态,一般不用改
note.hasAction = YES;
// 本地化通知的音效
note.soundName= UILocalNotificationDefaultSoundName;
// 或
note.soundName = @".aac.MP3应该都行";
// 设置 通知携带的信息
note.userInfo = @{@"name":@"ksang"};
// 5 有直接发出通知的 **********
// [[UIApplication sharedApplication]presentLocalNotificationNow:note];
}
// 取消本地通知
- (void)cancelNote
{
UIApplication *app = [UIApplication sharedApplication];
// 打印现有通知的个数
NSLog(@"%ld",app.scheduledLocalNotifications.count);
// 打印出现有的 Notification
NSLog(@"currentUserNotificationSettings --------- %@",app.scheduledLocalNotifications);
// 移除所有本地通知
[[UIApplication sharedApplication]cancelAllLocalNotifications];
}
各位客官请注意 iOS8.0 之后本地通知需要注册,发送才有效.
正常写在 代理 的didFinishLaunching里.
下面是~AppDelegate.mm中的代码
didFinishLaunching 里面可以根据 launchOptions 中的note 判断是否是从icon进来的,还是通过推送进来的
// didFinishLaunching
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 注册本地通知
[self registerUserNotification];
// 创建一个推送。。来接受launchOptions 字典中的[]
UILocalNotification *note =launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (note)
{
// NSLog(@"是从通知进来的");
// NSLog(@"%@",note.userInfo);
}
else
{
// NSLog(@"直接点击icon进来的");
}
return YES;
}
// 注册通知
- (void)registerUserNotification
{
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_8_0
// iOS8注册通知
UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
#else
#endif
}
// 程序进入前台的时候调用的方法
- (void)applicationDidBecomeActive:(UIApplication *)application {
// 改变appicon右上角的角标 具体后面再定 是直接设为0还是-1; 并且这句话的位置也得做相应的更改.
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
}
// 从推送 进入程序
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// self.window.rootViewController.view
// 据说可以拿到VC 如果能拿到,客官就可以为所欲为了@^.^@
}
如果有什么不对的,请大神们及时纠正.并且请大爷赏个 💗 吧muamua~