您的位置:首页 > 移动开发 > IOS开发

项目实战:iOS极光推送集成(30分钟搞定)

2016-04-10 15:33 676 查看
推送有很多,如个推、友盟、融云和极光等等。在这里就讲下如何使用极光推送。主要内容是将官方文档资料详细汇总并一步一步集成到项目中,您也可以直接去官方文档阅览。

[b]极光推送SDK下载[/b]

直接打开官方文档下载最新的SDK

[b]极光网创建APP并上传证书[/b]

一、制作推送证书和描述文件:需要注意要制作两个证书,一个是测试证书,一个是发布证书,具体看官方文档截图:点击查看证书制作

直接看《iOS 证书 设置指南》其他的不用看了,废话太多

二、在极光推送官网注册你的APP吧。bundle id要和你项目一直,如果是测试就选择开发环境,上线后再切换下就可以了;开发环境和生产环境的证书千万别弄混了,是p12文件,还有密码的。



[b]项目配置问题[/b]

1、直接将SDK中的lib文件夹拖到项目中,里面主要是两个文件,.a静态安装包和.h文件。还有Demo中一个声音文件要添加。

2、添加必要的框架

CFNetwork.framework

CoreFoundation.framework

CoreTelephony.framework

SystemConfiguration.framework

CoreGraphics.framework

Foundation.framework

UIKit.framework

Security.framework

Adsupport.framework (获取IDFA需要)

Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

3、如果SDK是2.1.0后的,直接编译,如果报错,会有一个bitcode错误,直接到Build Settings 关闭 bitCode 选项;

如果还有报错,看下是否是因为找不到.a的静态库,把静态库地址拖过去就可以了。



4、如果是老版本的,SDK1.8.8创建并配置PushConfig.plist文件,如图



如果是最新的SDK,直接跳过了,直接忽视这条就可以了

5、如果用的是Xcode7时,需要在App项目的plist手动加入以下key和值以支持http传输:

1.在Info.plist中添加NSAppTransportSecurity类型Dictionary。

2.在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES

注意:不是单元测试的info.plist

6、打开推送设置





7、打开xxx-info.plist的Bundle identifier项把上传到JPush 控制台的bundle id填写进去:



[b]项目代码[/b]

你也可以直接在第一步的SDK中查看具体的Demo。

在Appdelegate.h导入头文件

#import <AdSupport/AdSupport.h>
#import "JPUSHService.h"


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {

[JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
UIUserNotificationTypeSound |
UIUserNotificationTypeAlert)
categories:nil];
} else {

[JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert)
categories:nil];
}

[JPUSHService setupWithOption:launchOptions appKey:JPushAPPKEY
channel:channel
apsForProduction:isProduction
advertisingIdentifier:advertisingId];

}


setupWithOption 方法中需要的参数

appkey:注册的APPkey,网站上找去吧

channel:随便写个字符串吧,也没事

advertisingIdentifier:广告标识符,(苹果都废弃了,这厮还要,哎)

apsForProduction:BOOL值,区分是开发环境还是测试环境

接下来是几个回调函数设置下就可以了

- (void)applicationDidEnterBackground:(UIApplication *)application {

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

}
- (void)applicationWillEnterForeground:(UIApplication *)application {
[application setApplicationIconBadgeNumber:0];
[application cancelAllLocalNotifications];
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{

[JPUSHService registerDeviceToken:deviceToken];
NSLog(@"%@", [NSString stringWithFormat:@"Device Token: %@", deviceToken]);
}
- (void)application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}

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

NSLog(@"8.0收到通知:%@",[self logDic:userInfo]);

[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);

}


具体API参考具体版本SDK,我的SDK是2.1.5,最新的哦!

completionHandlez作用主要是2个:

1、并根据传递的UIBackgroundFetchResult 参数记录新数据是否可用

2、调用完成的处理代码时,应用的界面缩略图会自动更新

[b]测试推送[/b]

好了,你现在在真机跑下项目,然后就可以去极光网站测试你的推送是否成功了(app在后台或者锁屏状态下都可以收到通知的)



[b]问题汇总[/b]

如果控制台没有打印出你的消息,说明你有问题了。



不要急,看下官方的问题汇总吧,反正你按照上面做的,保证没问题的哦,》》》》》》问题汇总
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息