ios开发 关闭消息推送怎样发请求获取推送的数据

下次自动登录
关注移动互联网和移动APP开发工具、开发框架、测试工具、微信开发、Android源码、Android开源类库以及各种开源组件的IT科技网站
现在的位置:
iOS—–推送机制
推 送 机 制
使用NSNotificationCenter通信
NSNotificationCenter实现了观察者模式,允许应用的不同对象之间以松耦合的方式进行通信。
NSNotification代表Poster与Observer之间的信息载体,该对象包含如下只读属性。
name:该属性代表该通知的名字,程序将Poster注册到指定通知中心时,就是根据该名称进行注册的
object:该属性代表该通知的Poster。
userInfo:该属性是一个NSDictionary对象,用于携带通知的附加信息。
NSNotificationCenter是整个通知系统的中心,Observer向NSNotificationCenter注册自己感兴趣的通知,Poster向NSNotificationCenter发送通知。
- addObserverForName:object:queue:usingBlock:该方法将指定代码块注册为监听者,监听object:参数代表的对象(Poster)发出的通知(由第1个参数指定通知名称)。该方法直接使用指定代码块作为监听者,当Poster向NSNotificationCenter发送通知时,将会触发、执行该代码块。如果object:参数为nil,则用于监听任何对象发出的通知。
1 ViewController.m
3 @implementation ViewController
5 - (void)viewDidLoad
viewDidLoad];
// 监听UIApplicatiob的
UIApplicationDidFinishLaunchingNotification通知
[[NSNotificationCenter
defaultCenter]
addObserver:self
selector:@selector(launch:)
name:UIApplicationDidFinishLaunchingNotification
object:[UIApplication sharedApplication]];
// 监听UIApplicatiob的
UIApplicationDidEnterBackgroundNotification通知
[[NSNotificationCenter
defaultCenter]
addObserver:self
selector:@selector(back:)
name:UIApplicationDidEnterBackgroundNotification
object:[UIApplication sharedApplication]];
// 监听UIApplicatiob的
UIApplicationWillEnterForegroundNotification通知
[[NSNotificationCenter
defaultCenter]
addObserver:self
selector:@selector(fore:)
name:UIApplicationWillEnterForegroundNotification
object:[UIApplication
sharedApplication]];
43 - (void)back: (NSNotification*)Notification
self.showLabel.text = [NSString stringWithFormat:@”应用程序加载完成!”];
51 - (void)launch: (NSNotification*)Notification
self.showLabel.text = [NSString
stringWithFormat:@”%@/n应用程序进入后台!”,
self.showLabel.text];
61 - (void) fore: (NSNotification*)Notification
self.showLabel.text = [NSString
stringWithFormat:@”%@/n应用程序进入前台!”,
self.showLabel.text];
使用NSNotificationCenter监听自定义通知
使用NSNotificationCenter除了可以监听系统组件发出的通知之外,也可以监听程序自己发出的通知.下面示例将使用异步操作来模拟执行一个耗时任务,并在界面上使用UIProgressView显示耗时任务的执行进度.
ViewController.m
@import “ViewController.h”
PROGRESS_CHANGED
@”down_progress_changed”
@interface ViewController()
NSNotificationCenter*
NSOperationQueue*
@implementation ViewController
- (void)viewDidLoad
viewDidLoad];
nc = [NSNotificationCenter
defaultCenter];
queue = [[NSOperationQueue
// 设置该队列最多支持10个并发线程
queue.maxConcurrentOperationCount = 10;
// 使用视图控制器监听任何对象发出的 PROGRESS_CHANGED 通知
addObserver:self
selector:@selector(update:)
name: PROGRESS_CHANGED
object:nil]; // ①
- (IBAction)start: (id)sender
__block int progStatus = 0;
setEnabled:NO];
// 以传入的代码块作为执行体,创建NSOperation
NSBlockOperation* operation = [NSBlockOperation
blockOperationWithBlock:^{
for(int I = 0; i & 100;
// 暂停0.5秒模拟耗时任务
sleepForTimeInterval: 0.5] ;
// 创建NSNotification,并指定userInfo信息
NSNotification*
noti = [NSNotification
notificationWithName: PROGRESS_CHANGED
object:nil
userInfo: [NSDictionary
dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: ++ progStatus]
,@”prog” ,
// 发送通知
postNotification : noti]; // ②
// 将NSOperation添加给NSOperationQueue
addOperation:
operation];
- (void)update: (NSNotification*) noti
// 通过userInfo属性获取耗时任务的进度信息
NSNumber* progStatus = noti.userInfo[@”prog”];
NSLog(@”%d”, progStatus.intValue);
dispatch_async(dispatch_get_main_queue(), ^{
self.prog.progress = progStatus.intValue
// 当任务执行进度执行到100时,启用按钮
if(100 == progStatus.intValue)
setEnabled: YES];
上面程序中的第1行代码将视图控制器注册为通知监听者,用于监听任何对象的PROGRESS_CHANGED通知;接下来的第②行代码先创建了一个NSNotification,并使用NSNotificationCenter发送该通知。当该异步代码块向NSNotificationCenter发送通知之后,通知监听者的方法(update:)将会被触发执行,这个update:方法将会更新界面上UIProgressView的进度.
iOS本地通知
本地通知属于应用界面编程的内容,本地通知和远程推送通知都可以向不在前台运行的应用发送消息,这种消息既可能是即将发生的事件,也可以是服务器的新数据,都可能显示为一段警告信息信息或应用程序图标上的徽标。
本地通知和远程推送通知的基本目的都死让应用程序能够通知用户某些事情,而且不需要应用程序在前台运行。二者的区别在于:本地通知由本应用负责调用,只能从当前设备上的 iOS 发出;而远程推送通知由远程服务器上的程序(可由任意语言编写)发送至 Apple Push Notification service(APNs), 再由 APNs 把消息推送至设备上对应的程序.
本地通知是一个 UILocalNotification对象,它有如下常用属性.
fireData: 指定通知将在什么时间触发.
repeatInterval:设置本地通知重复发送的时间间隔.
alertBody: 设备本地通知的消息体.
alertAction:
设置当设备处于锁屏状态时,显示通知的警告框下方的 title.
has Action: 设置是否显示 Action.
alertLaunchImage: 当用户通过该通知启动对应的应用时, 该属性设置为加载图片.
applicatonIconBadgeNumber: 设置显示在应用程序上红色徽标中的数字.
soundName: 设置通知的声音.
userInfo: 设置该通知携带的附加信息.
创建了 UILocalNotification对象之后,接下来就可以通过 UIApplication 的如下两个方法发送通知了
- scheduleLocalNotification: 该方法指定调度通知。通知将会于 fireDate 指定的时间触发,而且会按 repeatInterval 指定的时间间隔重复触发。
- presentLocalNotificationNow: 该方法指定立即发送通知。该方法会忽略UILocalNotification的fireDate属性。
如果系统发出通知时,应用程序处于前台运行,系统将会触发应用程序委托类的application:didReceiveLocalNotification:方法。
在iOS应用中发送本地通知的步骤很简单,只要如下几步即可。
创建UILocalNotification对象
设置UILocalNotification的属性
调用UIApplication的方法发送或调用通知
如果希望应用程序在前台运行时可以对通知进行相应的处理,则需要重写应用程序委托类的application:didReceiveLocalNotification:方法。
当应用需要取消本地通知时,可调用UIApplication的cancelLocalNotification:方法取消指定通知,或调用cancelLocalNotifications方法取消所有通知。
示例示范如何开发本地通知
ViewController.m
@interface
ViewController()
UIApplication* app;
@implementation
ViewController
- (void)viewDidLoad
viewDidLoad];
app = [UIApplication
sharedApplication];
- (IBAction)changed: (id)sender
= (UISwitch*)sender;
创建一个本地通知
UILocalNotification*
notification
= [[UILocalNotification
alloc] init]; // ①
设置通知的触发时间
notification.fireDate
dateWithTimeIntervalSinceNow:10];
设置通知的时区
notification.timeZone = [NSTimeZone
defaultTimeZone];
// 设置通知重复发送的时间间隔
notification.repeatInterval = kCFCalendarUnitMinute;
设置通知的声音
notification.soundName
= @”gu.mp3”;
设置当设备处于锁屏状态时, 显示通知的警告框下方的 title
notification.alertAction =
@”打开”;
设置通知是否显示 Action
notification.hasAction = YES;
设置通过通知加载应用时显示的图片
notification.alertLaunchingImage
= @”logo.png”;
设置通知内容
notification.alertBody = @”轮到你下棋了,
赶快走棋!”;
// 设置显示在应用程序上红色徽标中的数字
notification.applicationIconBadgeNumber
设置 userInfo, 用于携带额外的附加信息
NSDictionary*
info = @: @”key”};
notification.userInfo =
[app scheduleLocalNotification:Notification]; // ①
// 获取所有处于调度中的本地通知数组
localArray = [app
scheduledLocalNotifications];
if(localArray)
for(UILocalNotification * noti
localArray)
NSDictionary*
= noti.userI
如果找到要取消的通知
inKey = [dict
objectForKey:@”key”];
isEqualToString:@”123456”])
// 取消调度该通知
cancelLocalNotification: noti]; // ②
上面程序中的第①段代码创建了一个UILocalNotification对象,并为该对象设置了相关属性,接下来在①号代码处调用了UIApplication的scheduleLocalNotification:方法来调度通知,这样该通知将会在指定事件触发,并按相应的周期重复执行。当用户把UISwitch控件切换到关闭状态时,②号代码将会取消调度该通知。
为了让程序处于前台运行时也能看到本地通知,还重写了应用程序委托类的application:didReceiveLocalNotification:方法。
AppDelegate.m
@implementation
AppDelegate
只有当应用程序在前台运行时,该方法才会被调用
- (void)application: (UIApplication*)application
didReceiveLocalNotification: (UILocalNotification*) notification
// 如果应用程序在前台运行,则将应用程序图标上的红色徽标中的数字设为0
application.applicationIconBadgeNumber = 0; // ①
// 使用UIAlertView显示本地通知的信息
[[[UIAlertView
initWithTitle:@” 收到通知
message:notification.alertBody
delegate:nil
cancelButtonTitle:@”确定”
otherButtonTitles: nil]
- (void)applicationWillEnterForeground: (UIApplication*) application
// 当应用程序再次进入前台运行时,将应用程序徽标中数字设为0
application.applicationIconBadgeNumber = 0;
上面程序中的第①②段代码控制当应用程序处于前台运行时,即使程序收到了本地通知,也依然会将应用程序图标上的红色徽标中数字设为0。
iOS远程推送通知
iOS远程推送通知由远程服务器上的程序(可由任意语言编写)发送至APNs,再由APNs把消息推送至设备上对应的程序。
iOS远程推送通知的过程可用下图进行描述
在上面中,Provider指远程服务器上的Push服务端应用,这种Push服务端应用可以使用任意语言编写,如Java、PHP等。
APNs由Apple公司提供,APNs负责把通知发送到对应的iOS设备,该设备再把通知转发给ClientApp-----即我们的iOS应用。
上面所示的过程分为3个阶段
第一个阶段:Provider程序把要发送的通知、目标iPhone的device token (相当于该设备的唯一标识)打包,发给APNs.
第二阶段:APNs通过已注册Push服务的iPhone列表查找具有对应device
token的iPhone,并把Push通知发送给对应的iPhone。
第三阶段:iPhone将收到的Push通知传递给相应的应用程序,并且按照设定弹出Push通知。
实际上,Push服务端程序可以通过APNs将一条通知发送给多个iPhone
上的客户端应用;与此同时,iPhone上的客户端应用也可接收多个Push服务端程序发送过来的推送通知。下图显示了这种示意图
对于开发iOSPush服务而言,完整的过程如下。
应用程序注册远程推送通知。
当应用程序注册推送通知成功或注册失败时,系统都会触发应用程序委托类的对应方法。可以通过重写应用程序委托类的这些方法来获取该设备注册成功后得到的device token。
应用程序将device token发送给Push服务端程序
服务端程序向APNs发送通知。
APNs将通知发送给iOS应用------实际的过程是先发送给指定的iOS设备,再由该设备弹出Push通知。
从上图可以看出,Push客户端应用需要3个组件。
ID(应用程序唯一标识,这个必须到Apple网站注册来获得)
Provisioning
Profile(这个也必须到Apple网站下载)
token(当Push客户端应用注册Push推送通知成功时,APNs将会返回该设备的device
Push服务端程序则需要如下两个组件
Certificate(SSL连接证书,这个必须从Apple网站下载)。
Key(私钥,这个可用过开发者电脑导出)。
开发Push客户端应用
开发Push客户端应用需要到Apple网站注册一个App ID,而且该App ID不允许使用通配符。通过Apple网站注册App ID的步骤如下。
X系统上的”钥匙串访问”应用,单击该应用的主菜单”钥匙串访问” →”证书助理”→”从证书颁发机构请求证书”,如下图所示.
单击”从证书颁发机构请求证书”后,将会显示下图所示的对话框
输入电子邮件地址和常用名称,并选中“存储到磁盘”单选钮,然后单击“继续”按钮,该程序将会创建一个“Certificate
Signing Request”(证书签名请求)文件,系统弹出下图所示的保存文件对话框
将证书签名请求文件保存到磁盘上,此处将该文件保存为“Push。cerSigningRequest”。
使用浏览器打开 站点, 页面上将会提示用户输入开发者账号/密码. 登录成功后会看到如下说是的页面
在上图所示页面中,可以看到在“iOS
Apps”栏目下包含了Certificates、Identifiers、Device、ProvisioningProfiles-----这些只有登录账号已经加入iOS Developer Program(iDP)的原因。
→“Identifiers”→栏目下的”App
IDS” 链接,系统将会显示如下图
本地通知与远程推送的区别
开发iOSPush服务的完整的过程
Push客户端应用需要3个组件
【上篇】【下篇】ios开发 怎样发请求获取推送的数据_百度知道
ios开发 怎样发请求获取推送的数据
提问者采纳
Provider是给你手机应用发出推送消息的服务器,而APNS(Apple P订恭斥枷俪磺筹委船莲ush Notification Service)则是苹果消息推送服务器。你本地的服务器当需要给应用推送一条消息的时候,先要将消息发出到苹果推送服务器,然后再由苹果推送服务器将消息发到安装了该应用的手机。接下来再看一张解释图:根据上图的逻辑我来给大家解释一下:1.你的IOS应用需要去注册APNS消息推送功能。2.当苹果APNS推送服收到来自你应用的注册消息就会返回一串device token给你(很重要)3.将应用收到的device Token传给你本地的Push服务器。4.当你需要为应用推送消息的时候,你本地的推送服务器会将消息,以及Device Token打包发送到苹果的APNS服5.APNS再将消息推送给目的iphone
其他类似问题
为您推荐:
ios的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁推荐这篇日记的豆列
······iOS开发网络篇—发送json数据给服务器以及多值参数 - 文顶顶 - 博客园
最怕你一生碌碌无为 还安慰自己平凡可贵
iOS开发网络篇&发送json数据给服务器以及多值参数
一、发送JSON数据给服务器
发送JSON数据给服务器的步骤:
(1)一定要使用POST请求
(2)设置请求头
(3)设置JSON数据为请求体
代码示例:
1 #import "YYViewController.h"
3 @interface YYViewController ()
7 @implementation YYViewController
9 - (void)viewDidLoad
[super viewDidLoad];
14 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
// 1.创建请求
NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/MJServer/order"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
request.HTTPMethod = @"POST";
// 2.设置请求头
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
// 3.设置请求体
NSDictionary *json = @{
@"order_id" : @"123",
@"user_id" : @"789",
@"shop" : @"Toll"
NSData --& NSDictionary
// NSDictionary --& NSData
NSData *data = [NSJSONSerialization dataWithJSONObject:json options:NSJSONWritingPrettyPrinted error:nil];
request.HTTPBody =
// 4.发送请求
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
NSLog(@"%d", data.length);
二、多值参数
多值参数:一个参数对应多个值。
如下面的请求参数:
服务器的place属性是一个数组。因此用同一个参数不会把服务器的值覆盖。
随笔 - 177
评论 - 1309君,已阅读到文档的结尾了呢~~
ios 本地消息推送 ios本地推送..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
IOS开发中本地消息推送方法
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口}

我要回帖

更多关于 ios开发post请求 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信