IOS_OC_本地推送知识总结
知识点介绍
一. 推送通知介绍(了解)
二. 本地推送通知
- 本地通知的基本使用
- 本地通知的不常用属性
- 删除重复的通知
- 通知的处理1-跳转界面
- 通知的处理2-程序退出
- 分类的设置/快捷回复
一. 推送通知介绍(了解)
- 推送通知的分类
- 本地推送通知
- 远程推送通知
- 推送通知作用
- 可以让不在前台运行的App告知用户App内部发生了什么事情
- 推送通知效果
- 屏幕顶部显示一个横幅
- 屏幕中间弹出一个UIAertView
- 锁屏时候也照样显示
- 呈现的通知同时修改应用图标
- 播放音效
- 用户接受的推送通知都会展示在通知中心
- 手机设置推送通知(自己看手机, 不解释)
- 推送通知的使用细节
- 发送通知时,如果应用程序正在前台运行,那么推送通知就不会显示出来
- 点击推送通知默认会打开发送推送通知的应用
- 不管应用是打开还是关闭,推送通知都可以如期发送
二. 本地推送通知
1. 本地通知的基本使用
- 注册用户通知权限(只需一次, 可以单独放在Appdelegate中, 或者别的地方) —> iOS8以后必须, 需要用户授权才可以发送通知
- 创建本地通知
- 设置属性
- 调度通知(添加通知到本地通知调度池)
iOS7
			1.创建本地通知
//创建本地通知
[[UILocalNotification alloc]init]
2.设置本地通知属性
a.通知的内容 alertBody
b.通知发送的时间 fireTime
c.锁屏状态下滑块的文字 alertAction
d.是否显示锁屏状态的滑块的文字 hasAction
e.设置启动图片(随便指定) alertLauchImage
  f.通知中心内部,该通知的标题  alertTitle
//通知的内容
localNotification.alertBody = @"你是猪么";
//通知触发时间
localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5];
//锁屏状态的下滑块文字
localNotification.alertAction = @"猪";
//是否显示锁屏状态的滑块文字
localNotification.hasAction = NO;
//通知中心显示的程序的名称
localNotification.alertTitle = @"MK小月";
(iOS 8.2 才有的)
  a.通知音效的名称  soundName  (一般都使用默认的)
b.设置图标右上角的文字 applicationIconBadgeNumber
c.重复的时间间隔 repeatInterval (可以指定一个NSCalendarUnit)
d.设置重复执行使用的日历 repeatCalendar
e.设置额外信息 userInfo
//通知音效的名称(静音状态是震动)
localNotification.soundName = UILocalNotificationDefaultSoundName;
//设置图标右上角的文字
localNotification.applicationIconBadgeNumber = ;
//重复的时间间隔,可以指定一个NSCalendarUnit(最小是分钟)
localNotification.repeatInterval = NSCalendarUnitMinute;
//设置重复执行使用的日历
localNotification.repeatCalendar;
3.让应用调度本地通知
//4. 将本地通知添加到系统的本地通知调度池中
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
4. 删除重复的通知
//主要的目的是取消 一直重复的通知 (重复的通知会一直存在调度池中, 不消失)
//删除单个通知
- (IBAction)cancelLocalNotificationClick:(id)sender {
//1. 获取之前的通知, 并删除
NSArray *localNitifications = [[UIApplication sharedApplication] scheduledLocalNotifications]; NSLog(@"删除前: localNitifications: %@", localNitifications); //2. 循环遍历
for (UILocalNotification *localNotification in localNitifications) { //3. 可以根据内容/通知的标示符删.
NSString *userInfo = localNotification.userInfo[@"username"];
NSLog(@"userinfo: %@", userInfo); if ([userInfo isEqualToString:@"男神"]) { [[UIApplication sharedApplication] cancelLocalNotification:localNotification];
}
} NSLog(@"删除后: localNitifications: %@", localNitifications);
}
//删除全部通知
- (IBAction)cancelALLLocalNotificationClick:(id)sender {
//如果有重复的通知, 都会被取消掉
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
iOS8
			在应用程序启动的时候注册用户权限
				1.创建用户通知配置
					    UIUserNotificationSettings *setting = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge |   UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
categories
   可以自定义通知的按钮,点击按钮可以执行后台或前台任务
   可以让我们提前准备好一些通知,使用的时候只需要指定使用category即可
2.注册用户通知配置
  [application registerUserNotificationSettings:setting];
//1. 请求授权
// << 用于拼接选项用的
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
//2.注册用户通知配置
[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]) {
        // 跳转界面
    }
/**
一. 通知的情况
点击本地通知的时候, 会分成3种情况进行处理
处理的目的, 就是获取不同的参数信息, 进行不同的逻辑处理(跳转不同的板块等) 1. 前台(程序在主界面显示) application:didReceiveLocalNotification:
2. 后台(按住Home键退出后天/锁屏) application:didReceiveLocalNotification:
3. 程序被杀死了 application: didFinishLaunchingWithOptions: 二. 处理的逻辑
1. 前台/后台: application:didReceiveLocalNotification:
1> 判断是否是前台(用户正在操作程序, 不应该直接发生跳转) 判断applicationState
2> 根据程序的要求进行逻辑处理 (咱们当前的逻辑是调整不同的TabBar板块) 2. 程序退出: application: didFinishLaunchingWithOptions:
1> 判断参数是否有值
2> 获取通知, 并进行处理(不需要进行前台判断, 因为程序退出是一种单独的特殊状态) */ //当接收到本地通知后会调用
//此方法, 前台/后台都可以接收到
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
/**
UIApplicationStateActive, 激活(前台)
UIApplicationStateBackground 后台
*/ //1. 如果是前台, 就不进行跳转
if (application.applicationState == UIApplicationStateActive) {
//将来可以提醒用户有新的消息
return;
} //2. 本地通知处理
[self localNotification:notification];
} - (void)localNotification:(UILocalNotification *)notification
{
//1. 获取TabBar,
UITabBarController *tabBarC = (UITabBarController *)self.window.rootViewController; //2.在进行跳转.
tabBarC.selectedIndex = [notification.userInfo[@"selectIndex"] integerValue];
}
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
    [super viewDidLoad];
}
//抢红包
- (IBAction)changeToRedBaoClick:(id)sender {
    //目前的需求是切换根控制器的板块, 我们就简单的使用 1, 2来标识
    [self sendLocalNotificationWithAlertBody:@"有人发红包, 快去抢" userInfo:@{@"selectIndex" : @""}];
}
//购物车
- (IBAction)chageToBuyCarClick:(id)sender {
    [self sendLocalNotificationWithAlertBody:@"购物车没满, 快去抢" userInfo:@{@"selectIndex" : @""}];
}
//共用的发本地通知的代码 --> userinfo不一样 --> 将来可以根据userinfo进行区别处理
- (void)sendLocalNotificationWithAlertBody:(NSString *)alertBody userInfo:(NSDictionary *)userinfo {
    //2. 创建本地通知
    UILocalNotification *localNotification = [UILocalNotification new];
    //3. 设置本地通知的相关属性
    //3.1 触发时间
    localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:];
    //3.2 内容
    localNotification.alertBody = alertBody;
    //3.3 声音(模拟器没有声音)(静音状态是震动)
    localNotification.soundName = UILocalNotificationDefaultSoundName;
    //3.4 应用程序角标
    localNotification.applicationIconBadgeNumber = ;
    //3.5 用户信息
    localNotification.userInfo = userinfo;
    //4. 将本地通知添加到系统的本地通知调度池中
    [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
}
5. 通知的处理2(当程序退出时的处理)
- 在应用程序启动时调用的方法中判断是否有通知的值
- 获取本地通知信息
- 自行处理逻辑
二. 处理的逻辑
. 前台/后台: application:didReceiveLocalNotification:
> 判断是否是前台(用户正在操作程序, 不应该直接发生跳转) 判断applicationState
> 根据程序的要求进行逻辑处理 (咱们当前的逻辑是调整不同的TabBar板块) . 程序退出: application: didFinishLaunchingWithOptions:
> 判断参数是否有值
> 获取通知, 并进行处理(不需要进行前台判断, 因为程序退出是一种单独的特殊状态) */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //1. 请求授权 //1. 创建按钮
//1.1 创建按钮1
UIMutableUserNotificationAction *action1 = [UIMutableUserNotificationAction new];
action1.identifier = @"Foreground";
action1.title = @"好的";
action1.activationMode = UIUserNotificationActivationModeForeground; //1.2 创建按钮2
UIMutableUserNotificationAction *action2 = [UIMutableUserNotificationAction new];
//为了区分不同的按钮点击, 增加的标示符
action2.identifier = @"Background";
action2.title = @"取消";
action2.activationMode = UIUserNotificationActivationModeBackground; //如果想要实现iOS9自定义的文本框回复, 需要增加一个属性.
action2.behavior = UIUserNotificationActionBehaviorTextInput; //2. 设置分类, 需要使用子类 UIUserNotificationCategory
UIMutableUserNotificationCategory *category = [UIMutableUserNotificationCategory new];
[category setActions:@[action1, action2] forContext:UIUserNotificationActionContextDefault]; //不同的本地通知, 可以有不同的响应处理. 为了区分不同的本地通知, 也需要增加标示符
//这里的id, 需要和发送本地通知设置的category的值一致. 只有一致才能响应
category.identifier = @"category"; //3. 设置权限, 并设置分类
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:[NSSet setWithObject:category]]; //4. 注册权限
[application registerUserNotificationSettings:settings]; //程序退出 //1. 判断是否有本地通知的值
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey] != nil) { //2. 获取通知
UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; //3. 本地通知处理
[self localNotification:notification];
}
return YES;
}
6. 分类的使用
- 发送通知时, 增加category来设置标示符
#warning 这里的分类字符串, 一定要和在注册时的分类标示符一致 (category.identifier = @"category"
    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_本地推送知识总结的更多相关文章
- iOS-推送,证书申请,本地推送
		介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容 ... 
- iOS 本地推送通知
		1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ... 
- IOS中程序如何进行推送消息(本地推送,远程推送)
		[1]-------------什么是推送消息? 我就以一张图解释------------ [2]-----------IOS程序中如何进行本地推送?----------- 2.1,先征求用户同意 1 ... 
- IOS 本地推送 IOS10.0以上   static的作用  const的作用
		//需要在AppDelegate里面启动APP的函数 加上 UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNot ... 
- 本地推送UILocalNotification
		//本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ... 
- iOS本地推送与远程推送
		原文在此 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ... 
- IOS之推送通知(本地推送和远程推送)
		推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ... 
- Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件
		上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ... 
- Swift - 推送之本地推送(UILocalNotification)
		// 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ... 
随机推荐
- hbase单机环境的搭建和完全分布式Hbase集群安装配置
			HBase 是一个开源的非关系(NoSQL)的可伸缩性分布式数据库.它是面向列的,并适合于存储超大型松散数据.HBase适合于实时,随机对Big数据进行读写操作的业务环境. @hbase单机环境的搭建 ... 
- 【Java基础】Java中的持久属性集Properties
			Properties 类的介绍 Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载.属性列表中每个键及其对应值都是一个字符串.一个属性列表可包含另一个属性列 ... 
- .NET Compact Framework Data Provider for SQL Server CE
			.NET Compact Framework Data Provider for SQL Server Mobile Standard Data Source=MyData.sdf;Persist S ... 
- java 关于多态的一点总结
			http://www.cnblogs.com/wenruo/p/5352683.html 一直不是很理解多态,今天看了两遍<think in java>第八章,试着总结一下. 多态的本质就 ... 
- freemaker分页备忘
			思路:定义一个freemaker宏,接收参数.然后在freemaker页面上import这个文件,把参数传进来在server端渲染. 分页标签:pager.ftl <#-- 自定义的分页指令. ... 
- post方法
			CookieContainer cookie = new CookieContainer(); private string HttpPost(string Url, string postDataS ... 
- JS好的学习网站
			1.JavaScript 秘密花园 2.W3CSchool 3.js严格模式 4.js核心之原型 5.尼古拉斯怎么面试前端工程师 6.zepto中文版api 7.jquery API 
- SQLite 入门教程(二)创建、修改、删除表 (转)
			转于 SQLite 入门教程(二)创建.修改.删除表 一.数据库定义语言 DDL 在关系型数据库中,数据库中的表 Table.视图 View.索引 Index.关系 Relationship 和触发器 ... 
- 知道Form.Show()和Form.ShowDialog()的区别吗
			博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:知道Form.Show()和Form.ShowDialog()的区别吗. 
- CSS3 keyframes动画实现弹跳效果
			首先,“回到顶部”.“用户反馈”这两个按钮是通过定位放在左下角上. (1)“回到顶部”的按钮只有当滚动条有出现下滑时才出现 (2)“用户反馈”按钮,用户刚打开时会抖动一下,引起用户的注意,然后才定住. ... 
