知识点介绍

一. 推送通知介绍(了解)

二. 本地推送通知

  1. 本地通知的基本使用
  2. 本地通知的不常用属性
  3. 删除重复的通知
  4. 通知的处理1-跳转界面
  5. 通知的处理2-程序退出
  6. 分类的设置/快捷回复

一. 推送通知介绍(了解)

  1. 推送通知的分类
    • 本地推送通知
    • 远程推送通知
  2. 推送通知作用
    • 可以让不在前台运行的App告知用户App内部发生了什么事情
  3. 推送通知效果
    • 屏幕顶部显示一个横幅
    • 屏幕中间弹出一个UIAertView
    • 锁屏时候也照样显示
    • 呈现的通知同时修改应用图标
    • 播放音效
    • 用户接受的推送通知都会展示在通知中心
  4. 手机设置推送通知(自己看手机, 不解释)
  5. 推送通知的使用细节
    • 发送通知时,如果应用程序正在前台运行,那么推送通知就不会显示出来
    • 点击推送通知默认会打开发送推送通知的应用
    • 不管应用是打开还是关闭,推送通知都可以如期发送

二. 本地推送通知

1. 本地通知的基本使用

  • 注册用户通知权限(只需一次, 可以单独放在Appdelegate中, 或者别的地方) —> iOS8以后必须, 需要用户授权才可以发送通知
  • 创建本地通知
  • 设置属性
  • 调度通知(添加通知到本地通知调度池)

iOS7
1.创建本地通知

  1. //创建本地通知
  2. [[UILocalNotification alloc]init]

2.设置本地通知属性

  a.通知的内容   alertBody

  b.通知发送的时间   fireTime

  c.锁屏状态下滑块的文字  alertAction

  d.是否显示锁屏状态的滑块的文字 hasAction

  e.设置启动图片(随便指定)  alertLauchImage

  f.通知中心内部,该通知的标题  alertTitle

  1. //通知的内容
  2. localNotification.alertBody = @"你是猪么";
  3. //通知触发时间
  4. localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
  5. //锁屏状态的下滑块文字
  6. localNotification.alertAction = @"猪";
  7. //是否显示锁屏状态的滑块文字
  8. localNotification.hasAction = NO;
  9. //通知中心显示的程序的名称
  10. localNotification.alertTitle = @"MK小月";

(iOS 8.2 才有的)
  a.通知音效的名称  soundName  (一般都使用默认的)

  b.设置图标右上角的文字  applicationIconBadgeNumber

  c.重复的时间间隔   repeatInterval  (可以指定一个NSCalendarUnit)

  d.设置重复执行使用的日历  repeatCalendar

  e.设置额外信息  userInfo

  1. //通知音效的名称(静音状态是震动)
  2. localNotification.soundName = UILocalNotificationDefaultSoundName;
  3. //设置图标右上角的文字
  4. localNotification.applicationIconBadgeNumber = ;
  5. //重复的时间间隔,可以指定一个NSCalendarUnit(最小是分钟)
  6. localNotification.repeatInterval = NSCalendarUnitMinute;
  7. //设置重复执行使用的日历
  8. localNotification.repeatCalendar;

3.让应用调度本地通知

  1. //4. 将本地通知添加到系统的本地通知调度池中
  2. [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

4. 删除重复的通知

  1. //主要的目的是取消 一直重复的通知 (重复的通知会一直存在调度池中, 不消失)
  2. //删除单个通知
  3. - (IBAction)cancelLocalNotificationClick:(id)sender {
  4. //1. 获取之前的通知, 并删除
  5. NSArray *localNitifications = [[UIApplication sharedApplication] scheduledLocalNotifications];
  6.  
  7. NSLog(@"删除前: localNitifications: %@", localNitifications);
  8.  
  9. //2. 循环遍历
  10. for (UILocalNotification *localNotification in localNitifications) {
  11.  
  12. //3. 可以根据内容/通知的标示符删.
  13. NSString *userInfo = localNotification.userInfo[@"username"];
  14. NSLog(@"userinfo: %@", userInfo);
  15.  
  16. if ([userInfo isEqualToString:@"男神"]) {
  17.  
  18. [[UIApplication sharedApplication] cancelLocalNotification:localNotification];
  19. }
  20. }
  21.  
  22. NSLog(@"删除后: localNitifications: %@", localNitifications);
  23. }
  1. //删除全部通知
  2. - (IBAction)cancelALLLocalNotificationClick:(id)sender {
  3. //如果有重复的通知, 都会被取消掉
  4. [[UIApplication sharedApplication] cancelAllLocalNotifications];
  5. }

iOS8
在应用程序启动的时候注册用户权限
1.创建用户通知配置
  UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge |   UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];

categories
   可以自定义通知的按钮,点击按钮可以执行后台或前台任务
   可以让我们提前准备好一些通知,使用的时候只需要指定使用category即可
2.注册用户通知配置
  [application registerUserNotificationSettings:setting];

  1. //1. 请求授权
  2. // << 用于拼接选项用的
  3. UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
  4. //2.注册用户通知配置
  5. [application registerUserNotificationSettings:settings];

4. 通知的处理1(跳转不同界面/前台不跳转)

1.当用户进入某个区域的时候发送通知
 配置info文件
    NSLocationAlwaysUsageDescription
    NSLocationWhenInUseUsageDescription
注册用户权限
    设置CLLocationManager的delegate
监听用户授权的改变
  - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
子主题 5
当接收到通知跳转到指定页面
在AppDelegate中实现
  application:(UIApplication *)application didReceiveLocalNotification:
  方法在接收到本地通知的时候就会调用
  但是有时候,应用本来就在前台,进行跳转,影响用户体验,所以需要判断一下
  application.applicationState
  但是如果应用死掉了,通过点击通知启动应用就不会执行上面的代理方法了
  所以在方法:application:didFinishLaunchingWithOptions
  if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
// 跳转界面
}

  1. /**
  2. 一. 通知的情况
  3. 点击本地通知的时候, 会分成3种情况进行处理
  4. 处理的目的, 就是获取不同的参数信息, 进行不同的逻辑处理(跳转不同的板块等)
  5.  
  6. 1. 前台(程序在主界面显示) application:didReceiveLocalNotification:
  7. 2. 后台(按住Home键退出后天/锁屏) application:didReceiveLocalNotification:
  8. 3. 程序被杀死了 application: didFinishLaunchingWithOptions:
  9.  
  10. 二. 处理的逻辑
  11. 1. 前台/后台: application:didReceiveLocalNotification:
  12. 1> 判断是否是前台(用户正在操作程序, 不应该直接发生跳转) 判断applicationState
  13. 2> 根据程序的要求进行逻辑处理 (咱们当前的逻辑是调整不同的TabBar板块)
  14.  
  15. 2. 程序退出: application: didFinishLaunchingWithOptions:
  16. 1> 判断参数是否有值
  17. 2> 获取通知, 并进行处理(不需要进行前台判断, 因为程序退出是一种单独的特殊状态)
  18.  
  19. */
  20.  
  21. //当接收到本地通知后会调用
  22. //此方法, 前台/后台都可以接收到
  23. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
  24. {
  25. /**
  26. UIApplicationStateActive, 激活(前台)
  27. UIApplicationStateBackground 后台
  28. */
  29.  
  30. //1. 如果是前台, 就不进行跳转
  31. if (application.applicationState == UIApplicationStateActive) {
  32. //将来可以提醒用户有新的消息
  33. return;
  34. }
  35.  
  36. //2. 本地通知处理
  37. [self localNotification:notification];
  38. }
  39.  
  40. - (void)localNotification:(UILocalNotification *)notification
  41. {
  42. //1. 获取TabBar,
  43. UITabBarController *tabBarC = (UITabBarController *)self.window.rootViewController;
  44.  
  45. //2.在进行跳转.
  46. tabBarC.selectedIndex = [notification.userInfo[@"selectIndex"] integerValue];
  47. }
  1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()
  4.  
  5. @end
  6.  
  7. @implementation ViewController
  8.  
  9. - (void)viewDidLoad {
  10. [super viewDidLoad];
  11. }
  12.  
  13. //抢红包
  14. - (IBAction)changeToRedBaoClick:(id)sender {
  15.  
  16. //目前的需求是切换根控制器的板块, 我们就简单的使用 1, 2来标识
  17. [self sendLocalNotificationWithAlertBody:@"有人发红包, 快去抢" userInfo:@{@"selectIndex" : @""}];
  18.  
  19. }
  20.  
  21. //购物车
  22. - (IBAction)chageToBuyCarClick:(id)sender {
  23.  
  24. [self sendLocalNotificationWithAlertBody:@"购物车没满, 快去抢" userInfo:@{@"selectIndex" : @""}];
  25. }
  26.  
  27. //共用的发本地通知的代码 --> userinfo不一样 --> 将来可以根据userinfo进行区别处理
  28. - (void)sendLocalNotificationWithAlertBody:(NSString *)alertBody userInfo:(NSDictionary *)userinfo {
  29.  
  30. //2. 创建本地通知
  31. UILocalNotification *localNotification = [UILocalNotification new];
  32.  
  33. //3. 设置本地通知的相关属性
  34. //3.1 触发时间
  35. localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:];
  36.  
  37. //3.2 内容
  38. localNotification.alertBody = alertBody;
  39.  
  40. //3.3 声音(模拟器没有声音)(静音状态是震动)
  41. localNotification.soundName = UILocalNotificationDefaultSoundName;
  42.  
  43. //3.4 应用程序角标
  44. localNotification.applicationIconBadgeNumber = ;
  45.  
  46. //3.5 用户信息
  47. localNotification.userInfo = userinfo;
  48.  
  49. //4. 将本地通知添加到系统的本地通知调度池中
  50. [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
  51. }

5. 通知的处理2(当程序退出时的处理)

  • 在应用程序启动时调用的方法中判断是否有通知的值
  • 获取本地通知信息
  • 自行处理逻辑
  1. 二. 处理的逻辑
  2. . 前台/后台: application:didReceiveLocalNotification:
  3. > 判断是否是前台(用户正在操作程序, 不应该直接发生跳转) 判断applicationState
  4. > 根据程序的要求进行逻辑处理 (咱们当前的逻辑是调整不同的TabBar板块)
  5.  
  6. . 程序退出: application: didFinishLaunchingWithOptions:
  7. > 判断参数是否有值
  8. > 获取通知, 并进行处理(不需要进行前台判断, 因为程序退出是一种单独的特殊状态)
  9.  
  10. */
  11.  
  12. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  13.  
  14. //1. 请求授权
  15.  
  16. //1. 创建按钮
  17. //1.1 创建按钮1
  18. UIMutableUserNotificationAction *action1 = [UIMutableUserNotificationAction new];
  19. action1.identifier = @"Foreground";
  20. action1.title = @"好的";
  21. action1.activationMode = UIUserNotificationActivationModeForeground;
  22.  
  23. //1.2 创建按钮2
  24. UIMutableUserNotificationAction *action2 = [UIMutableUserNotificationAction new];
  25. //为了区分不同的按钮点击, 增加的标示符
  26. action2.identifier = @"Background";
  27. action2.title = @"取消";
  28. action2.activationMode = UIUserNotificationActivationModeBackground;
  29.  
  30. //如果想要实现iOS9自定义的文本框回复, 需要增加一个属性.
  31. action2.behavior = UIUserNotificationActionBehaviorTextInput;
  32.  
  33. //2. 设置分类, 需要使用子类 UIUserNotificationCategory
  34. UIMutableUserNotificationCategory *category = [UIMutableUserNotificationCategory new];
  35. [category setActions:@[action1, action2] forContext:UIUserNotificationActionContextDefault];
  36.  
  37. //不同的本地通知, 可以有不同的响应处理. 为了区分不同的本地通知, 也需要增加标示符
  38. //这里的id, 需要和发送本地通知设置的category的值一致. 只有一致才能响应
  39. category.identifier = @"category";
  40.  
  41. //3. 设置权限, 并设置分类
  42. UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:[NSSet setWithObject:category]];
  43.  
  44. //4. 注册权限
  45. [application registerUserNotificationSettings:settings];
  46.  
  47. //程序退出
  48.  
  49. //1. 判断是否有本地通知的值
  50. if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey] != nil) {
  51.  
  52. //2. 获取通知
  53. UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
  54.  
  55. //3. 本地通知处理
  56. [self localNotification:notification];
  57. }
  58. return YES;
  59. }

6. 分类的使用

  • 发送通知时, 增加category来设置标示符
  1. #warning 这里的分类字符串, 一定要和在注册时的分类标示符一致 (category.identifier = @"category"
  2.  
  3. localNotification.category = category;

2.远程通知
1.远程通知的使用场景与原理
使用场景
   1.团购提醒
   2.游戏中的任务提醒
原理
   短连接与长连接
   短连接
概念
  当客户向服务器请求数据的时候建立连接,接受到服务端的数据后释放连接
特点
  只有客户端向服务端请求数据,才能获得服务段的数据
缺点:
  每次请求数据都需要通过三次握手建立连接,请求后需要四次握手协议释放连接,频繁数据传输效率较差
  不能实现推送服务
优点:服务器的能够建立最大连接数量是有限的,可以更好利用服务器的连接资源
使用场景
  绝大多数情况我们使用都是短连接
长连接
概念
  客户端与服务端建立起连接后就一直保持
特点
  客户端可以给服务端发送数据,服务端也可以主动向客户端推送数据
缺点
  连接后就占用了服务器的连接资源,如果长连接过多,会导致其他用户链接不上
优点
  可实现推送服务
使用场景
  时间校准
  系统升级
  查找我的iPhone
  ....
整体原理图

共享客户端deviceToken原理

2.调试远程推送
  1.准备证书
  1.创建开发者证书(Developer)
  2.创一个可用与远程推送的App ID
  3.配置Development SSL Certificate
  必须与创建开发证书中使用的是同一个CertificateSigningRequest.certSigningRequest
  4.配置开发的Profile
2.安装证书
  与上面生成证书的先后顺序一致
3.客户端代码
  1.注册远程通知
1.iOS8.0之前
// 通知类型
  UIRemoteNotificationType type =   UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert;
// 注册通知
  [application registerForRemoteNotificationTypes:type];
2.iOS8之后(包含)
  UIUserNotificationSettings *remoteSetting = [UIUserNotificationSettings   settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
// 注册通知权限
  [application registerUserNotificationSettings:remoteSetting];

// 注册远程通知
  [application registerForRemoteNotifications];
2.监听获取token的方法
/**
* 注册远程通知返回方法
*/
  - (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
  #warning 不要通过 [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding] 来创一个字符串,因为通过它创建的字符串为空
// 正确的做法是使用description方法获取一个字符串
NSString *token = deviceToken.description;
// 服务端的使用的token是<ce190cfc 7c7bcff1 4b04d261 94632c57 ed00aee8 07d7cbd5 8bc43dbb 3d33cb86>
// 去掉前后的连个"<"和">"

4.发布远程推送App
1.配置 Production SSL Certificate
必须与创建开发证书中使用的是同一个CertificateSigningRequest.certSigningRequest
2.创建发布证书
3.创建发布的
3.极光推送
0.前提
1.推送的开发证书
2.产品证书
1.下载SDK
1.登陆网站,注册账号
2.文档->资源下载

3.下载iOS SDK

2.根据入门指南实现推送功能
1.转到入门指南->iOS集成指南

2.SDK集成步骤
1.创建应用
1.页面

2.转到个人账号管理中心->创建应用
3.导出开发证书.p12->上传
4.导出发布证书.p12->上传
2.创建项目,导入SDK
把lib文件夹拖入即可
3.导入依赖的框架
必须导入的框架Xcode6.3

4.在Appdelegate中实现推送相关的方法
3.常见错误
profile与证书不匹配

可能的情况
1.生成profile的证书和你本地安装的证书不一致
当一个账号多人使用的时候会出现这种情况,所以最好一个人负责账号管理,其他人使用p12文件
2.开发证书只安装到系统证书中,在登录证书中没有
解决:从系统证书中拷贝一份到登录里面
3.开发证书在登录中有,但在系统中没有
解决方案:从登录证书中拷贝一份到系统证书
按住option键拖动也可以实现复制
3.证书,AppID,设备ID,Profile都是正确
但是如果你上次证书的profile的名字与这次相同,Xcode不会使用最新的
解决方案:
删除之前的缓存profile缓存
缓存路径:
/Users/用户名/Library/MobileDevice/Provisioning Profiles
重新双击你profile
1.发送本地通知
iOS7
1.创建本地通知
[[UILocalNotification alloc] init]
2.设置本地通知属性
alertBody
通知的内容
fireTime
通知发送的时间
alertAction
锁屏状态下滑块的文字
hasAction
是否显示锁屏状态的滑块的文字
alertLauchImage
设置启动图片(随便指定)
alertTitle
通知中心内部,该通知的标题
(iOS 8.2 才有的)
soundName
通知音效的名称
一般都使用默认的
applicationIconBadgeNumber
设置图标右上角的文字
repeatInterval
重复的时间间隔,可以指定一个NSCalendarUnit
repeatCalendar
设置重复执行使用的日历
userInfo
设置额外信息
3.让应用调度本地通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNote];
iOS8
在应用程序启动的时候注册用户权限
1.创建用户通知配置
UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
categories
可以自定义通知的按钮,点击按钮可以执行后台或前台任务
可以让我们提前准备好一些通知,使用的时候只需要指定使用category即可
2.注册用户通知配置
[application registerUserNotificationSettings:setting];
3.当用户进入某个区域的时候发送通知
配置info文件
NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
注册用户权限
设置CLLocationManager的delegate
监听用户授权的改变
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
子主题 5
当接收到通知跳转到指定页面
在AppDelegate中实现
application:(UIApplication *)application didReceiveLocalNotification:
该方法在接收到本地通知的时候就会调用
但是有时候,应用本来就在前台,进行跳转,影响用户体验,所以需要判断一下
application.applicationState
但是如果应用死掉了,通过点击通知启动应用就不会执行上面的代理方法了
所以在方法:application:didFinishLaunchingWithOptions
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
// 跳转界面

}
2.远程通知
1.远程通知的使用场景与原理
使用场景
1.团购提醒
2.游戏中的任务提醒
原理
短连接与长连接
短连接
概念
当客户向服务器请求数据的时候建立连接,接受到服务端的数据后释放连接
特点
只有客户端向服务端请求数据,才能获得服务段的数据
缺点:
每次请求数据都需要通过三次握手建立连接,请求后需要四次握手协议释放连接,频繁数据传输效率较差
不能实现推送服务
优点:服务器的能够建立最大连接数量是有限的,可以更好利用服务器的连接资源
使用场景
绝大多数情况我们使用都是短连接
长连接
概念
客户端与服务端建立起连接后就一直保持
特点
客户端可以给服务端发送数据,服务端也可以主动向客户端推送数据
缺点
连接后就占用了服务器的连接资源,如果长连接过多,会导致其他用户链接不上
优点
可实现推送服务
使用场景
时间校准
系统升级
查找我的iPhone
....
整体原理图

共享客户端deviceToken原理

2.调试远程推送
1.准备证书
1.创建开发者证书(Developer)
2.创一个可用与远程推送的App ID
3.配置Development SSL Certificate
必须与创建开发证书中使用的是同一个CertificateSigningRequest.certSigningRequest
4.配置开发的Profile
2.安装证书
与上面生成证书的先后顺序一致
3.客户端代码
1.注册远程通知
1.iOS8.0之前
// 通知类型
UIRemoteNotificationType type = UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeAlert;
// 注册通知
[application registerForRemoteNotificationTypes:type];
2.iOS8之后(包含)
UIUserNotificationSettings *remoteSetting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];
// 注册通知权限
[application registerUserNotificationSettings:remoteSetting];

// 注册远程通知
[application registerForRemoteNotifications];
2.监听获取token的方法
/**
* 注册远程通知返回方法
*/
- (void) application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
#warning 不要通过 [[NSString alloc] initWithData:deviceToken encoding:NSUTF8StringEncoding] 来创一个字符串,因为通过它创建的字符串为空
// 正确的做法是使用description方法获取一个字符串
NSString *token = deviceToken.description;
// 服务端的使用的token是<ce190cfc 7c7bcff1 4b04d261 94632c57 ed00aee8 07d7cbd5 8bc43dbb 3d33cb86>
// 去掉前后的连个"<"和">"

4.发布远程推送App
1.配置 Production SSL Certificate
必须与创建开发证书中使用的是同一个CertificateSigningRequest.certSigningRequest
2.创建发布证书
3.创建发布的
3.极光推送
0.前提
1.推送的开发证书
2.产品证书
1.下载SDK
1.登陆网站,注册账号
2.文档->资源下载

3.下载iOS SDK

2.根据入门指南实现推送功能
1.转到入门指南->iOS集成指南

2.SDK集成步骤
1.创建应用
1.页面

2.转到个人账号管理中心->创建应用
3.导出开发证书.p12->上传
4.导出发布证书.p12->上传
2.创建项目,导入SDK
把lib文件夹拖入即可
3.导入依赖的框架
必须导入的框架Xcode6.3

4.在Appdelegate中实现推送相关的方法
3.常见错误
profile与证书不匹配

可能的情况
1.生成profile的证书和你本地安装的证书不一致
当一个账号多人使用的时候会出现这种情况,所以最好一个人负责账号管理,其他人使用p12文件
2.开发证书只安装到系统证书中,在登录证书中没有
解决:从系统证书中拷贝一份到登录里面
3.开发证书在登录中有,但在系统中没有
解决方案:从登录证书中拷贝一份到系统证书
按住option键拖动也可以实现复制
3.证书,AppID,设备ID,Profile都是正确
但是如果你上次证书的profile的名字与这次相同,Xcode不会使用最新的
解决方案:
删除之前的缓存profile缓存
缓存路径:
/Users/用户名/Library/MobileDevice/Provisioning Profiles
重新双击你profile

IOS_OC_本地推送知识总结的更多相关文章

  1. iOS-推送,证书申请,本地推送

    介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容 ...

  2. iOS 本地推送通知

    1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ...

  3. IOS中程序如何进行推送消息(本地推送,远程推送)

    [1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ...

  4. IOS 本地推送 IOS10.0以上 static的作用 const的作用

    //需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ...

  5. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  6. iOS本地推送与远程推送

    原文在此 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  7. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

  8. Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件

    上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...

  9. Swift - 推送之本地推送(UILocalNotification)

    // 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ...

随机推荐

  1. bzoj 1877 [SDOI2009]晨跑(最小费用最大流)

    Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十 ...

  2. 【Kafka入门】Kafka入门第一篇:基础概念篇

    Kafka简介 Kafka是一个消息系统服务框架,它以提交日志的形式存储消息,并且消息的存储是分布式的,为了提供并行性和容错保障,消息的存储是分区冗余形式存在的. Kafka的架构 Kafka中包含以 ...

  3. BZOJ1901 - Dynamic Rankings(树状数组套主席树)

    题目大意 给定一个有N个数字的序列,然后又m个指令,指令种类只有两种,形式如下: Q l r k 要求你查询区间[l,r]第k小的数是哪个 C i t  要求你把第i个数修改为t 题解 动态的区间第k ...

  4. mysql均衡负载

    一.利用mysql 复制分流查询操作: 利用mysql的主从复制可以有效的分流更新操作和查询操作,具体的实现是一个主服务器,承担更新操作,多台从服务器,承担查询操作,主从之间通过复制实现数据的同步.多 ...

  5. 教程-Delphi各种退出break,continue, exit,abort, halt, runerror

    delphi中表示跳出的有break,continue, exit,abort, halt, runerror.1.break 强制退出循环(只能放在循环中),用于从For语句,while语句或rep ...

  6. 问题-delphi XE2 Stack Overflow- save your work and restart CodeGear

    问题现象:某一天,启动DLEPHI XE2 后,新建一个工程,双击一个事件,“Stack Overflow- save your work and restart CodeGear delphi xe ...

  7. Ubuntu下为 Flash插件方法

    1.下载flash插件,地址:http://get.adobe.com/cn/flashplayer/ 下载tar格式的install_flash_player_11_linux_x86_64.tar ...

  8. HTTPResponse.read([amt]):只能read一次

    业务需要:我要写个tanx模拟器,给DSP发竞价请求. 下面是部分代码: def PostDataToDSP(self,url,postdata): headers = { 'Content-Type ...

  9. 牛一网ecshop家电数码模板(仿易迅网)for ecshop 2.7.3

            本模板尤其适用于家电数码行业. 本模板已经开发.测试完毕,并开放演示. 本模板支持全站静态.销售数量后台自定义.首页商品独立图片.品牌独立展示.商品精美团购.宽屏窄屏自动识别并切换.分 ...

  10. socket编程——一个简单的样例

    从一个简单的使用TCP样例開始socket编程,其基本过程例如以下: server                                                  client ++ ...