渣蜀黍 - iOS 个人笔记(四)_极光推送使用步骤
2015-04-15 10:32
453 查看
1.进入极光创建项目
首先根据步骤生成push证书:
http://docs.jpush.cn/pages/viewpage.action?pageId=1343727
ios开发证书就得上传后缀名为.p12的文件
导出.p12的步骤:
从 Apple 下载 Apple iPhone 证书后,将其导出为 P12 证书格式。在 Mac® OS 上执行以下操作:
打开钥匙串访问应用程序(位于应用程序/实用工具文件夹中)。
如果尚未将该证书添加到钥匙串,请选择“文件”>“导入”。然后浏览到您从 Apple 获取的证书文件(.cer 文件)。
在钥匙串访问中选择密钥类别。
选择与 iPhone 开发证书相关联的私钥。
该私钥由 iPhone 开发人员识别:与之配对的<名字><姓氏>公共证书。
选择“文件”>“导出项目”。
以个人信息交换 (.p12) 文件格式保存您的密钥。
系统将提示您创建一个尝试在其他计算机上导入此密钥时需要使用的密码。
上传文件提交即可;
2.下载 iOS SDK
https://www.jpush.cn/common/products
将SDK包解压,在XCode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含APService.h、libPushSDK.a)添加到你的工程目录中。
3.必要的框架
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
libz.dylib
在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,填入Portal为你的应用提供的APP_KEY等参数。
CHANNEL
指明应用程序包的下载渠道,为方便分渠道统计。根据你的需求自行定义即可。
APP_KEY
在管理Portal上创建应用时自动生成的(AppKey)用以标识该应用。请确保应用内配置的
AppKey 与第1步在 Portal 上创建应用时生成的 AppKey 一致,AppKey 可以在应用详情中查询。
APS_FOR_PRODUCTION
1.3.1版本新增,表示应用是否采用生产证书发布( Ad_Hoc 或 APP Store ),0 (默认值)表示采用的是开发者证书,1 表示采用生产证书发布应用。请注意此处配置与 Web Portal 应用环境设置匹配。
在1.2.2或之前版本的配置文件中,有 TEST_MODE 这个键,新版的SDK不再使用,可以将它删除。
APP_KEY为:
监听系统事件,相应地调用 JPush SDK 提供的 API 来实现功能。
关于极光推送,由于在iOS8之后,有了新的API,因此极光也给我们提供了适配的API。
下面我就把对极光推送相关API的封装提取出来。
下面是对极光推送而封装的一个工具类:
推送功能测试:
进入极光后台 发送消息。
======================================================================================================================================
网上借鉴,个人总结,有不同观点欢迎讨论,谢谢。
By:渣蜀黍
首先根据步骤生成push证书:
http://docs.jpush.cn/pages/viewpage.action?pageId=1343727
ios开发证书就得上传后缀名为.p12的文件
导出.p12的步骤:
在 Mac OS 上将 iPhone 开发人员证书转换为 P12 文件
从 Apple 下载 Apple iPhone 证书后,将其导出为 P12 证书格式。在 Mac® OS 上执行以下操作:打开钥匙串访问应用程序(位于应用程序/实用工具文件夹中)。
如果尚未将该证书添加到钥匙串,请选择“文件”>“导入”。然后浏览到您从 Apple 获取的证书文件(.cer 文件)。
在钥匙串访问中选择密钥类别。
选择与 iPhone 开发证书相关联的私钥。
该私钥由 iPhone 开发人员识别:与之配对的<名字><姓氏>公共证书。
选择“文件”>“导出项目”。
以个人信息交换 (.p12) 文件格式保存您的密钥。
系统将提示您创建一个尝试在其他计算机上导入此密钥时需要使用的密码。
上传文件提交即可;
2.下载 iOS SDK
https://www.jpush.cn/common/products
将SDK包解压,在XCode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含APService.h、libPushSDK.a)添加到你的工程目录中。
3.必要的框架
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
libz.dylib
4、Build Settings
设置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夹(默认为lib)与工程文件在同一级目录下,则都设置为"$(SRCROOT)/[文件夹名称]"即可。
5、创建并配置PushConfig.plist文件
在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,填入Portal为你的应用提供的APP_KEY等参数。指明应用程序包的下载渠道,为方便分渠道统计。根据你的需求自行定义即可。
APP_KEY
在管理Portal上创建应用时自动生成的(AppKey)用以标识该应用。请确保应用内配置的
AppKey 与第1步在 Portal 上创建应用时生成的 AppKey 一致,AppKey 可以在应用详情中查询。
APS_FOR_PRODUCTION
1.3.1版本新增,表示应用是否采用生产证书发布( Ad_Hoc 或 APP Store ),0 (默认值)表示采用的是开发者证书,1 表示采用生产证书发布应用。请注意此处配置与 Web Portal 应用环境设置匹配。
在1.2.2或之前版本的配置文件中,有 TEST_MODE 这个键,新版的SDK不再使用,可以将它删除。
APP_KEY为:
6.调用代码
监听系统事件,相应地调用 JPush SDK 提供的 API 来实现功能。关于极光推送,由于在iOS8之后,有了新的API,因此极光也给我们提供了适配的API。
下面我就把对极光推送相关API的封装提取出来。
下面是对极光推送而封装的一个工具类:
#import <Foundation/Foundation.h> #import <UIKit/UIKit.h> /*! * @brief 极光推送相关API封装 * @author 渣蜀黍 */ @interface JPushHelper : NSObject // 在应用启动的时候调用 + (void)setupWithOptions:(NSDictionary *)launchOptions; // 在appdelegate注册设备处调用 + (void)registerDeviceToken:(NSData *)deviceToken; // ios7以后,才有completion,否则传nil + (void)handleRemoteNotification:(NSDictionary *)userInfo completion:(void (^)(UIBackgroundFetchResult))completion; // 显示本地通知在最前面 + (void)showLocalNotificationAtFront:(UILocalNotification *)notification; @end
#import "JPushHelper.h" #import "APService.h" @implementation JPushHelper + (void)setupWithOptions:(NSDictionary *)launchOptions { // Required #if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_7_1 // ios8之后可以自定义category if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) { // 可以添加自定义categories [APService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert) categories:nil]; } else { #if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_8_0 // ios8之前 categories 必须为nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; #endif } #else // categories 必须为nil [APService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert) categories:nil]; #endif // Required [APService setupWithOption:launchOptions]; return; } + (void)registerDeviceToken:(NSData *)deviceToken { [APService registerDeviceToken:deviceToken]; return; } + (void)handleRemoteNotification:(NSDictionary *)userInfo completion:(void (^)(UIBackgroundFetchResult))completion { [APService handleRemoteNotification:userInfo]; if (completion) { completion(UIBackgroundFetchResultNewData); } return; } + (void)showLocalNotificationAtFront:(UILocalNotification *)notification { [APService showLocalNotificationAtFront:notification identifierKey:nil]; return; } @end
推送功能测试:
#import "AppDelegate.h" #import "JPushHelper.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; // Override point for customization after application launch. [JPushHelper setupWithOptions:launchOptions]; self.window.backgroundColor = [UIColor whiteColor]; [self.window makeKeyAndVisible]; return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [JPushHelper registerDeviceToken:deviceToken]; return; } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [JPushHelper handleRemoteNotification:userInfo completion:nil]; return; } #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_7_0 // ios7.0以后才有此功能 - (void)application:(UIApplication *)application didReceiveRemoteNotification :(NSDictionary *)userInfo fetchCompletionHandler :(void (^)(UIBackgroundFetchResult))completionHandler { [JPushHelper handleRemoteNotification:userInfo completion:completionHandler]; // 应用正处理前台状态下,不会收到推送消息,因此在此处需要额外处理一下 if (application.applicationState == UIApplicationStateActive) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"收到推送消息" message:userInfo[@"aps"][@"alert"] delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil nil]; [alert show]; } return; } #endif - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification { [JPushHelper showLocalNotificationAtFront:notification]; return; } - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { NSLog(@"Error in registration. Error: %@", err); } - (void)applicationDidBecomeActive:(UIApplication *)application { [application setApplicationIconBadgeNumber:0]; return; } @end
进入极光后台 发送消息。
======================================================================================================================================
网上借鉴,个人总结,有不同观点欢迎讨论,谢谢。
By:渣蜀黍
相关文章推荐
- iOS开发-极光推送SDK使用笔记
- 极光推送个人使用整理
- IOS JPush 集成步骤(极光远程推送解决方案,支持android和iOS两个平台)
- iOS - 关于极光推送的步骤
- iOS 学习笔记-个人头像获取UIImagePickerController使用
- php使用JPush极光推送ios android通知消息
- [置顶] iOS开发:创建推送开发证书和生产证书,以及往极光推送官网上传证书的步骤方法
- Android项目使用极光推送时步骤及注意的细节
- 学习笔记-极光推送使用心得
- [个人笔记]mybatis-spring使用步骤
- [个人笔记]ajax使用步骤
- 步骤,将推送通知使用Unity3d iOS上
- 步骤,将推送通知使用Unity3d iOS上
- 极光推送使用 IOS端
- 《iOS极光推送步骤》
- IOS开发使用极光平台进行远程推送
- 渣蜀黍 - iOS 个人笔记(一)_数据处理
- 使用极光推送做iOS客户端的推送
- iOS远程推送之使用极光推送
- iOS极光推送-具体步骤