iOS 推送通知
来源:互联网 发布:怎么看淘宝的追加评论 编辑:程序博客网 时间:2024/05/19 13:13
iOS 推送通知:
注意:通知是一个应用程序级别的操作UIApplication
推送通知 与 NSNotification 区别
NSNotification是抽象的,不可见的
推送通知是可见的
iOS中提供了2种推送通知
本地推送通知(Local Notification)
远程推送通知(Remote Notification)
推送通知的作用: 可以让不在前台运行的app,告知用户app内部发生了什么事情
推送通知的呈现效果总结
用户接收的推送通知,都会展示在“通知中心”
从屏幕顶部往下滑,就能调出“通知中心”
显示横幅还是UIAlertViewController,取决于用户的设置
推送通知5种不同的呈现效果
在屏幕顶部显示一块横幅(显示具体内容:发送者和消息)
在屏幕中间弹出一个UIAlertView(显示具体内容)
在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
更新app图标的数字(新内容的数量)
播放音效(提醒作用)
推送通知的使用细节
发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来
点击推送通知后,默认会自动打开发出推送通知的app
不管app打开还是关闭,推送通知都能如期发出
本地推送
AppDelegate.h文件
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/*
UIUserNotificationTypeNone = 0, 不给用户发通知
UIUserNotificationTypeBadge = 1 << 0, 是否可以改变应用图标右上角的提示数字
UIUserNotificationTypeSound = 1 << 1, 通知声音
UIUserNotificationTypeAlert = 1 << 2, 是否有弹窗提示
*/
if ([UIDevicecurrentDevice].systemVersion.doubleValue >= 8.0) {
UIUserNotificationSettings *settings = [UIUserNotificationSettingssettingsForTypes:UIUserNotificationTypeBadge |UIUserNotificationTypeAlert | UIUserNotificationTypeSoundcategories:nil];
[application registerUserNotificationSettings:settings];
}
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
// 跳转
UILabel *label = [[UILabelalloc] init];
label.frame = CGRectMake(0, 300, 300, 300);
label.backgroundColor = [UIColorredColor];
label.text = [NSStringstringWithFormat:@"%@", launchOptions];
label.font = [UIFontsystemFontOfSize:14];
//自动换行
label.numberOfLines = 0;
[self.window.rootViewController.viewaddSubview:label];
}
return YES;
}
/**
* 点击通知打开应用的时候会执行该方法
* 应用在前台的时候,收到通知也会执行该方法
*
* notification 通知
*/
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UILabel *label = [[UILabelalloc] init];
label.frame = CGRectMake(0, 0, 300, 300);
label.backgroundColor = [UIColorredColor];
label.text = [NSStringstringWithFormat:@"notification--%@", notification];
label.font = [UIFontsystemFontOfSize:14];
label.numberOfLines = 0;
[self.window.rootViewController.viewaddSubview:label];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return YES;
}
@end
推送
#import "ViewController.h"
@interface ViewController ()
/**
* 点击按钮后添加本地通知
*/
- (IBAction)addLocalNote;
/**
* 移除通知---不常用
*/
- (IBAction)removeLocalNote;
@end
@implementation ViewController
- (void)viewDidLoad {
[superviewDidLoad];
}
/**
* 点击按钮后添加本地通知
*/
- (IBAction)addLocalNote {
// 1.创建一个本地通知
UILocalNotification *localNote = [[UILocalNotificationalloc] init];
// 1.1.设置通知发出的时间
localNote.fireDate = [NSDatedateWithTimeIntervalSinceNow:5];
// 1.2.设置通知发出的内容
localNote.alertBody = @"你好么?";
// 1.3.是否弹出提示框
localNote.hasAction = YES;
// 1.4.设置提示框
localNote.alertAction = @"请查看";
// 1.5.设置启动的图片
localNote.alertLaunchImage = [UIImageimageNamed:@"beijing"];
// 1.6.设置启动的音效
localNote.soundName =UILocalNotificationDefaultSoundName;
// 1.7.设置应用图标提醒的数字
localNote.applicationIconBadgeNumber = 20;
// 1.8.如果想将通知的信息传递过去,必须使用userInfo属性,切为一个字典类型
localNote.userInfo = @{@"msg" :@"你好么",@"date" : localNote.fireDate};
// 调度通知
[[UIApplicationsharedApplication] scheduleLocalNotification:localNote];
[[UIApplicationsharedApplication] setApplicationIconBadgeNumber:0];
}
- (IBAction)removeLocalNote {
[[UIApplicationsharedApplication] cancelAllLocalNotifications];
// [UIApplication sharedApplication] cancelLocalNotification:(UILocalNotification *)
}
@end
远程推送
1.appDelegate.h文件
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) {
// 1.向用户请求可以给用户推送消息
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
[application registerUserNotificationSettings:settings];
// 2.注册远程通知
//首先拿到用户的DeviceToken
[application registerForRemoteNotifications];
} else {
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}
// if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
// // 页面的跳转
// }
[application setApplicationIconBadgeNumber:0];
return YES;
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// 将用户的用户名和deviceToken发送给服务器,让服务器进行保存备份即可
NSLog(@"%@", deviceToken);
}
/**
* 当接受到远程通知的时候会调用该方法
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
//userInfo 远程通知的信息
// 在这里跳转
NSLog(@"%@", userInfo);
}
/**
* 如果接受到远程通知时,想要后台执行任务,则实现调用该方法
*
* @param userInfo
* @param completionHandler 后台执行完之后要告知系统,是否更新成功
*/
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
NSLog(@"%@", userInfo);
completionHandler(UIBackgroundFetchResultNewData);
}
@end
- iOS 推送通知
- iOS 远程推送通知
- iOS 推送通知详解
- iOS推送通知
- iOS推送通知实现
- iOS 推送通知详解
- iOS 推送通知详解
- iOS 推送通知详解
- IOS通知推送
- iOS远程推送通知
- iOS 消息推送通知
- iOS 推送通知详解
- 【iOS】推送通知
- iOS 推送通知
- “iOS 推送通知”
- 【iOS】推送通知
- IOS---APNS,推送通知
- IOS远程推送通知
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
- APUE------文件和目录
- grant all赋权后mysql.user表权限字段还是N,但能登录和新建表
- 安卓日记——简单验证码识别(安卓版)
- Python中的下划线/私有化
- iOS 推送通知
- Log4j.jar不同的日志分别写到不同的日志文件
- Ubuntu 10.10配置JRE、JDK、Eclipse和Tomcat7.0.5
- LeetCode 第 125 题 (Valid Palindrome)
- maven 项目jar 包冲突 Caused by: java.lang.ClassNotFoundException: org.apache.commons.beanutils.converters
- Eclipse启动时报错:A Java RunTime Environment (JRE) or Java Development Kit (JDK) must be available in ord
- wdcp服务器或网站怎么迁移最好最快?
- C#远程访问linux(ubuntu)或windows的mysql数据库
- ajax上传文件