iOS推送小结

iOS推送小结

(吐槽,md的代码编辑功能不知道是不会用还是确实不好用)

1.推送配置

1.1证书配置

请自行谷百.

1.2注册推送

    //代码来源:环信Demo
    //In method application:(UIApplication *)application didFinishLaunchingWithOptions:

    UIApplication *application = [UIApplication sharedApplication];
//注册APNS
if([application respondsToSelector:@selector(registerUserNotificationSettings:)])
{
    UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
    [application registerUserNotificationSettings:settings];
}

#if !TARGET_IPHONE_SIMULATOR
if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
    [application registerForRemoteNotifications];
}else{
    UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
    UIRemoteNotificationTypeSound |
    UIRemoteNotificationTypeAlert;
    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
}
#endif

registerUserNotificationSettings iOS8.0以后使用该方法来为app注册推送权限,第一次安装app时会弹出对话框提示用户是否允许接收推送消息.多次调用该方法来注册UIUserNotificationSettings会导致上一次的设置失效.

registerForRemoteNotifications iOS8.0以后在使用registerUserNotificationSettings方法注册推送权限后,还需要使用该方法开启远程推送权限(推送分为本地推送和远程推送,本地推送在此不做描述).该方法会回调application:didRegisterForRemoteNotificationsWithDeviceToken(在这个方法中需要将得到的deviceToken传给自己的推送服务器): 或者application:didFailToRegisterForRemoteNotificationsWithError: 两个方法之一.

**registerForRemoteNotifications**iOS3.0-iOS8.0以前注册推送的方法.

注意:上面的代码之所以判断是否为模拟器是因为模拟器是没有DeviceToken的,所以注册远程推送没有意义,推送原理会在文章末尾简介.

特别地,在iOS8中,在使用registerUserNotificationSettings:注册推送权限时增加了一个categories参数,可以用来自定义增加一些对推送消息的处理行为,示例代码如下:

 UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init];
acceptAction.identifier = @"acceptAction";
acceptAction.title = @"抢单";
acceptAction.activationMode = UIUserNotificationActivationModeForeground;

UIMutableUserNotificationCategory *categorys = [[UIMutableUserNotificationCategory alloc] init];
categorys.identifier = @"rush";
NSArray *actions = @[acceptAction];
[categorys setActions:actions forContext:UIUserNotificationActionContextMinimal];

 UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:[NSSet setWithObjects:categorys, nil]];
    [application registerUserNotificationSettings:settings];

此外,在进行推送时,需要在推送消息内增加一个category的key,value为rush,这样客户端在收到消息后下拉或者在锁屏界面左滑会出现一个抢单按钮.

处理category消息可再appdelegate的如下方法中进行:

- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:(NSDictionary *)userInfo completionHandler:(void (^)())completionHandler
{
    NSLog(@"%@----%@",identifier,userInfo);
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"抢单成功" message:nil
delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];

    [alert show];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"rushSuccess" object:nil];

 //处理完消息,最后一定要调用这个代码块
 completionHandler();

}

1.3处理推送

如果是程序正在运行或者说程序正在后台,那么这个时候处理推送消息的工作都是在:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

或者:

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

中完成。

如果应用程序没有启动:

  1. 带category的消息在点击相应的action后会直接进入application:(UIApplication *)application handleActionWithIdentifier:方法中进行处理,
  2. 不带category的消息在点击消息进入app后,会先调用application didReceiveRemoteNotification:fetchCompletionHandler:(iOS8实测中发现一直调用的是该方法,并未出现调用application didReceiveRemoteNotification的情况),之后会调用application didFinishLaunchingWithOptions:.

application didFinishLaunchingWithOptions:的launchOptions参数说明如下:

  1. 若用户直接启动,lauchOptions内无数据;
  2. 若由其他应用程序通过openURL:启动,则UIApplicationLaunchOptionsURLKey对应的对象为启动URL(NSURL),UIApplicationLaunchOptionsSourceApplicationKey对应启动的源应用程序的bundle ID (NSString);
  3. 若由本地通知启动,则UIApplicationLaunchOptionsLocalNotificationKey对应的是为启动应用程序的的本地通知对象(UILocalNotification);
  4. 若由远程通知启动,则UIApplicationLaunchOptionsRemoteNotificationKey对应的是启动应用程序的的远程通知信息userInfo(NSDictionary);
  5. 其他key还有UIApplicationLaunchOptionsAnnotationKey,UIApplicationLaunchOptionsLocationKey,

    UIApplicationLaunchOptionsNewsstandDownloadsKey。

2.APNs推送简介

每台iOS设备都会与APNs建立一个TLS连接,并凭此来接受推送消息.

如果设备处于断网离线状态,APNs会将要推送的消息缓存一小段时间,并在设备上线后推送消息.只能有一条时间最近的消息被缓存,如果在设备离线期间发送了多条消息,只会有时间上最后一条消息被推送.如果设备长期处于离线状态,那么所有缓存的离线消息都将被清空.

iOS8之后,推送消息的最大长度为2Kb,iOS8以前则为256bytes.

此外,还可以设置content-available字段来发送静默消息(用户界面不会有推送提示,将在之后发文介绍).

看了apple官方文档,发送推送的道道还挺多,预计将会是一系列的文章+示例进行说明.由于之后工作中会涉及到后台定位,所有下篇将会是后台定位相关的介绍.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-21 20:07:49

iOS推送小结的相关文章

iOS推送小结--swift语言

APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器. iPhone当然就是我们的iOS设备了,CllentApp就是我们的客户端程序 第一阶段:应用程序的服务器端把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把

iOS推送小结(证书的生成、客户端的开发、服务端的开发)

1.推送过程简介 1.1.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请.若注册成功,回调函数application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 会被触发,App可以得到deviceToken,该to

iOS 推送证书

push 服务器证书 钥匙串:登入-->证书,选项里面导出证书命名为cert.p12,跟密钥命名为key.p12 需要将上面的2个.p12文件转成.pem格式: openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12 openssl pkcs12 -nocerts -out key.pem -in key.p12 如果需要对 key不进行加密: openssl rsa -in key.pem -out key.unencrypted.

申请iOS推送证书.p12

iOS APP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书(开发环境)和上架到App Store的ios 推送证书(生产环境)! 一.iOS发布推送证书(开发环境)测试APP iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请iOS证书,如果没有Mac也无所谓. 可以很快速的创建iOS推送证书 先安装好Appuploader安装教程 1.打开Appuploader,选择Certification. 2.点击+ADD\选择Push Notif

IOS推送功能push

笔记:ios推送功能 推送可实时提醒用户你想要让客户端用户知道的信息,那怕用户并没有开启这个应用.应用场景很广泛,如淘宝应用:在你使用淘宝客户端的时候,假如你拍的东西发货了,如果没有推送功能,你不会及时知道你拍下的东西已经发货.但使用了推送后,淘宝就会发送一条推送通知,告知使用客户端App的你,你拍下的东西已经发货.使用推送的场景很多,在用户的体验度上更人性. 苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图. Provider是给你手机应用发

iOS推送 再备

这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容易驾驭,往往会搞的开发者精疲力尽,灰心丧气,无法持久.现在,救星来了!只要通读本教程,你就能摆脱这些烦恼,成为一名活力

iOS 推送证书制作(JAVA/PHP)

iOS 推送证书制作(JAVA/PHP) 在使用Java或者PHP制作iOS推送服务器的时候,需要自己从开发者网站上导出的aps_developer_identity证书和Apple Development Push Services证书进行合成,生成可以供Java使用的p12证书或供PHP使用的pem证书.aps_developer_identity证书和Apple Development Push Services证书的申请过程可以参考:http://www.cnblogs.com/hubj

教你做IOS推送 包会!

最近在研究iOS的推送问题,遇到了一些问题,最终整理了一下,放在这里和大家分享. APNS的推送机制 首先我们看一下苹果官方给出的对iOS推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器. 上图可以分为三个阶段: 第一阶段:应用程序的服务器端把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相

ios推送消息php做推送服务器

<?php /** * Main method to run the object * $message 消息内容 * $deviceToken 这里是iphone手机唯一的Token码(记得去掉空格) * $badge 就是应用图标右上角那个数字 * $sound 消息的声音 * $apnsCert 证书路径 * $passphrase 私钥的密码(可以不写) */ public function iosPush($message,$deviceToken,$badge=1,$sound='D