本文章只提供学习!!ios
iOS的消息推送(推送通知)有两种,一种是本地推送通知,另外一种是远程推送通知。所谓本地推送通知就是使用代码推送消息到用户设备中提醒用户一些信息,推送形式请查看手机设置。远程推送通知是经过服务器发送消息到用户设备中,iOS的远程推送通知要通过苹果的服务器来推送消息,过程比较麻烦。下面是我的学习笔记,提供新手学习(固然我也是个新手),不能用于商业用途。服务器
全部的消息推送只在后台或者推出程序才有意义,程序在前台运行的时候是没有意义的,全部发送消息推送的时候请把程序退出或者挂在后台运行才能体现出效果。app
1、本地推送通知框架
如下代码为了更好看到本地推送通知地效果最好写在一个按钮事件中,点击发送通知。ide
// 1.建立本地推送通知 UILocalNotification *localNotification = [[UILocalNotification alloc] init]; // 2.设置一些属性 // 通知发出的时间(5秒后) localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:5]; // 设置时区(跟随手机的时区) localNotification.timeZone = [NSTimeZone defaultTimeZone]; // 音乐文件名 localNotification.soundName = @"xxxxx.wav"; // 通知的内容 localNotification.alertBody = @"内容"; // 锁屏界面显示的标题 以下面的写法将显示:滑动来查看内容 格式:"滑动来" + 标题 localNotification.alertAction = @"查看内容" // 设置app图标数字 localNotification.applicationIconBadgeNumber = 10; // 设置通知的其余信息 localNotification.userInfo = @{ @"title" : @"好消息" };//可随意添加 // 设置启动图片 localNotification.alertLaunchImage = @"Default.png"; // 设置重复发出通知的时间间隔 // localNotification.repeatInterval = NSCalendarUnitMinute; // 3.发通知 [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
//----------------------------------------------------------学习
点击发送通知后把程序退出或者挂到后台,等待5秒就会有通知,若是以为5太长或过短请根据我的须要该上面到代码。测试
当用户点击通知进入app的时候或者程序运行在前台的时候会在appdelegate中调用下面这个方法fetch
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notificationui
若是想当app在前台的时候不作任何事情能够在上面的方法里面最前面加上这句代码:spa
// 程序正处在前台运行,直接返回 if (application.applicationState == UIApplicationStateActive) return;
也能够在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中判断是不是点击通知进入app,以下:
UILocalNotification *ln = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; if (ln) { //点击通知进入app } else { //点击app图标进入app }
2、远程推送通知
作远程推送必定要用真机,模拟器不能够。须要到苹果开发者中心配置一些证书,过程比较多,我就不文字描述来了,直接看图片演示过程。
1.首先在钥匙串中配置电脑签名文件
邮件地址通常写公司的就好,选择存储到磁盘,继续。
我就在桌面新建了个叫push到文件夹,点击存储。
2.须要一个AppIDs
(若是在测试阶段已经有了就不须要了,到时候直接用那个就能够,注意:AppIDs必定要是完整的,不能是xxx.xxx.* 作消息推送必定要是完整的ID),没有就弄一个,过程跟弄测试这书同样。反正作远程消息推送必定要真机测试,在作真机测试的时候已经有AppIDs了,这个过程就不贴出来了,不会的同窗能够先去查看怎么配置真机测试证书。
3.配置一个开发证书
点击加号
选择APNs 而后continue
选择本身应用的AppID 以后continue 继续continue
选择第一步的时候保存证桌面push文件夹中的电脑签名文件
最好我开发证书也保存到push文件夹中,方便管理。
4.接下来配置生产证书
点击production 点击加号
选择production中的APNs 接下来全部的步骤跟配置开发证书如出一辙,就不一一贴过程来。
5.这步骤才是最重要的。
点击加号
点击continue
选择你应用的APP ID
选择配置测试的时候生成的这书(本文没说明怎么配置测试证书,不知道请先查看如何配置测试证书)
选择测试设备,所有选择都不要紧
按意起个名字就行了点击generate 下载到push文件夹中。
6.安装全部到证书,能够直接拖到我到证书中
导出开发证书
起个名developmentPush,文件格式选择.p12
我这里输入abcd1234,大家随意,记住就行。
接下来也把生产证书导出来,我把名字起为productionPush,密码设置和开发证书同样(只是为了避免混淆,不同也能够),过程同样,就不贴图片了。
到这里就要全部到准备工做作好了,接下来是测试。
测试远程推送时候我是使用极光推送,大家有什么好的开源均可以使用。地址:www.jpush.cn ,注册个用户、登陆。
登陆上去点击建立应用
只要填写我选中都部分就能够了,开发证书就是developmentPush.p12文件,密码就是本身设置的密码。生产证书就是productionPush.p12文件。
建立好以后会获得一个appkey 要记下来,没记住也没事,在选择应用中点击你添加的应用也能够看到。
而后下载iOS SDK 地址:www.jpush.cn/common/products#product-sdk
下载好以后把里面的lib文件夹添加到工程中
接着在工程中建立plist文件
名字必定要是PushConfig.plist
点击plist文件
添加三个键值对,前面两个值按照个人内容写,最后一个就是在极光推送建立应用的Appkey
其中有3个是在建立工程的时候就用了,不须要重复添加
而后在工程中的appdelegate中添加如下代码:
在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中添加如下代码:
// Required #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { //能够添加自定义categories [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else { //categories 必须为nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; } #else //categories 必须为nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; #endif // Required [APService setupWithOption:launchOptions];
//----------------------------------------------------
最后添加如下方法:
#pragma mark - 获取DeviceToken - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // Required [APService registerDeviceToken:deviceToken]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { // Required [APService handleRemoteNotification:userInfo]; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { // IOS 7 Support Required [APService handleRemoteNotification:userInfo]; completionHandler(UIBackgroundFetchResultNewData); }
这样就大功告成了,用真机运行你的程序,而后退出程序,或者挂到后台。
这么发送通知呢?在极光推送平台点击你建立的应用,点击推送,发送通知
好了,完成。若是从下载iOS SDK开始就不懂的同窗能够查看教程,地址:http://docs.jpush.io/guideline/ios_guide/
上面整个教程在极光推送平台也有教程。
以上的文章只是我我的学习笔记,有什么错误的地方请不要喷,请您提出来让我改正,写博文不易,请不要乱复制拷贝别人的心得为本身的东西,感谢你们。