ios消息推送--iOS 8.0 后
本文章只提供学习!!
iOS的消息推送(推送通知)有两种,一种是本地推送通知,另一种是远程推送通知。所谓本地推送通知就是使用代码推送消息到用户设备中提醒用户一些信息,推送形式请查看手机设置。远程推送通知是通过服务器发送消息到用户设备中,iOS的远程推送通知要经过苹果的服务器来推送消息,过程比较麻烦。下面是个人学习笔记,提供新手学习(当然我也是个新手),不能用于商业用途。
所有的消息推送只在后台或者推出程序才有意义,程序在前台运行的时候是没有意义的,所有发送消息推送的时候请把程序退出或者挂在后台运行才能体现出效果。
一、本地推送通知
以下代码为了更好看到本地推送通知地效果最好写在一个按钮事件中,点击发送通知。
// 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中调用下面这个方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
如果想当app在前台的时候不做任何事情可以在上面的方法里面最前面加上这句代码:
// 程序正处在前台运行,直接返回 if (application.applicationState == UIApplicationStateActive) return;
也可以在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中判断是否是点击通知进入app,如下:
UILocalNotification *ln = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]; if (ln) { //点击通知进入app } else { //点击app图标进入app }
二、远程推送通知
做远程推送一定要用真机,模拟器不可以。需要到苹果开发者中心配置一些证书,过程比较多,我就不文字描述来了,直接看图片演示过程。
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
必要的框架
- CFNetwork.framework
- CoreFoundation.framework
- CoreTelephony.framework
- SystemConfiguration.framework
- CoreGraphics.framework
- Foundation.framework
- UIKit.framework
- Security.framework
- libz.dylib
其中有3个是在创建工程的时候就用了,不需要重复添加
然后在工程中的appdelegate中添加以下代码:
#import "APService.h"
在- (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/
上面整个教程在极光推送平台也有教程。
以上的文章只是我个人学习笔记,有什么错误的地方请不要喷,请您提出来让我改正,写博文不易,请不要乱复制拷贝别人的心得为自己的东西,感谢大家。