首页 > 代码库 > 项目实战:iOS极光推送集成(30分钟搞定)

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

推送有非常多,如个推、友盟、融云和极光等等。在这里就讲下怎样使用极光推送。

主要内容是将官方文档资料详细汇总并一步一步集成到项目中,您也能够直接去官方文档阅览。

极光推送SDK下载

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

极光网创建APP并上传证书

一、制作推送证书和描写叙述文件:须要注意要制作两个证书,一个是測试证书,一个是公布证书,详细看官方文档截图:点击查看证书制作
直接看《iOS 证书 设置指南》其它的不用看了,废话太多

二、在极光推送官网注冊你的APP吧。

bundle id要和你项目一直,假设是測试就选择开发环境。上线后再切换下就能够了;开发环境和生产环境的证书千万别弄混了。是p12文件,还有password的。
技术分享

项目配置问题

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填写进去:
技术分享

项目代码

你也能够直接在第一步的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、调用完毕的处理代码时。应用的界面缩略图会自己主动更新

測试推送

好了,你如今在真机跑下项目,然后就能够去极光站点測试你的推送是否成功了(app在后台或者锁屏状态下都能够收到通知的)
技术分享

问题汇总

假设控制台没有打印出你的消息,说明你有问题了。
技术分享

不要急。看下官方的问题汇总吧,反正你依照上面做的,保证没问题的哦,》》》》》》问题汇总

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

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