iOS最新极光推送详解(2016转)

1.配置开发证书(得有开发者账号,个人,企业的都可以)

开发环境测试

在对 JPush iOS 开发环境进行测试前,请确保 3 个统一:

  • App 是开发环境打包(开发证书 Development)
  • 上传了开发证书并验证通过
  • Portal 上的应用设置为开发环境

发布环境测试

在对 JPush iOS 生产环境进行测试前,请确保 3 个统一:

  • App 是 ad-hoc 打包或者App Store 版本(发布证书 Production)
  • 上传了发布证书并验证通过
  • Portal 上的应用设置为生产环境

iOS 证书 设置指南

创建应用程序ID

  • 登陆 iOS Dev Center 选择进入iOS Provisioning Portal。

  • 在 iOS Provisioning Portal中,点击App IDs进入App ID列表。

  • 创建 App ID,如果 ID 已经存在可以直接跳过此步骤

  • 为 App 开启 Push Notification 功能。如果是已经创建的 App ID 也可以通过设置开启 Push Notification 功能。

根据实际情况完善 App ID 信息并提交,注意此处需要指定具体的 Bundle ID 不要使用通配符。

配置和下载证书

  • 如果你之前没有创建过 Push 证书或者是要重新创建一个新的,请在证书列表下面新建。

  • 新建证书需要注意选择证书种类(开发证书用于开发和调试使用,生产证书用于 App Store 发布)

  • 点击 Continue 后选择证书对应的应用ID,然后继续会出现“About Creating a Certificate Signing Request (CSR)”。

  • 根据它的说明创建打开KeychainAccess 创建 Certificate Signing Request。

  • 填写“User Email Address”和“Common Name” 后选择 Saved to disk 进行保存 。

  • 继续返回Apple developer 网站点击 Continue ,上传刚刚生成的 .certSigningRequest 文件生成 APNs Push Certificate。
  • 下载并双击打开证书,证书打开时会启动“钥匙串访问”工具。
  • 在“钥匙串访问”中你的证书会显示在“我的证书”中,注意选择“My Certificates” 和"login"

导出 .p12 证书文件

注意要选“login”和“My Certificates” 导出证书时要选中证书文件,不要展开private key。

  • 将文件保存为Personal Information Exchange (.p12)格式。

  • 将文件保存为Personal Information Exchange (.p12)格式。

上传证书

在 JPush 管理 Portal 上,针对某应用程序,上传上面步骤得到 .p12 证书文件。这是 iOS SDK 能够接收到 JPush 推送消息的必要步骤。

Provisioning Profile的创建

  • 创建Provisioning Profile的前提,已在Apple Developer网站创建待发布应用所使用的Bundle ID的App ID,且为该App ID创建了APNs证书,如下图:

  • 创建App ID、APN证书和p12证书的导出的具体步骤请看 :iOS 证书 设置指南
  • 在苹果开发者账号的Provisioning Profile页面点击下图按钮,创建Provisioning Profile

  • 选择此Provisioning Profile的环境后点击[Continue]:

  • 选择要创建Provisioning Profile的App ID后点击[Continue]:

  • 选择所属的开发者证书,(这里创建了多个开发者证书,建议只创建一个,方便管理)为了方便,选择了[Select All],再点击[Continue]进入下一步:

  • 为该Provisioning Profile选择将要安装的设备(一般选择[Select All]),点击[Continue]:

  • 给该Provisioning Profile填写Profile Name,点击[generate]完成创建。

  • 填写完Profile Name后点击[generate]完成创建,之后点击[DownLoad]下载Provisioning Profile

  • 双击下载下来的Provisioning Profile,添加到xcode。

2. Xcode的证书配置教程

参照iOS SDK 集成指南集成JPush SDK 和上传了推送用到的p12证书后在编译运行前需要先配置一下证书,步骤如下:

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

  • 点击项目,选择目标TARGETS后进入Build Setting 界面,搜索“Code signing”,按照下图配置

客户端设置

开启Remote notifications

需要在Xcode 中修改应用的 Capabilities 开启Remote notifications,请参考下图:

3.SDK集成步骤

集成压缩包内容

包名为JPush-iOS-SDK-{版本号}

  • lib文件夹:包含头文件 JPUSHService.h,静态库文件jpush-ios-x.x.x.a ,支持的iOS版本为 5.0 及以上版本。(请注意:模拟器不支持APNs)
  • pdf文件:集成指南
  • demo文件夹:示例

开发环境

  • 使用Xcode 6及以上版本可以使用新版Push SDK,XCode 5环境下需要运行旧版本SDK(1.7.4)

1、在JPush Portal上创建应用

  • 在 JPush的管理Portal 上创建应用并上传APNs证书。如果对APNs证书不太了解 请参考: iOS 证书设置指南

  • 创建成功后自动生成 AppKey 用以标识该应用。

2、导入API开发包到应用程序项目

  • 将SDK包解压,在XCode中选择“Add files to ‘Your project name‘...”,将解压后的lib子文件夹(包含JPUSHService.h、jpush-ios-x.x.x.a)添加到你的工程目录中。

3、必要的框架

  • CFNetwork.framework
  • CoreFoundation.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • CoreGraphics.framework
  • Foundation.framework
  • UIKit.framework
  • Security.framework
  • Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

4、Build Settings

如果你的工程需要支持小于7.0的iOS系统,请到Build Settings 关闭 bitCode 选项,否则将无法正常编译通过。

  • 设置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夹(默认为lib)与工程文件在同一级目录下,则都设置为"(SRCROOT)/{静态库所在文件夹名称}"即可。

5、创建并配置PushConfig.plist文件

2.1.0 版本开始,新增了带参数的setupWithOption初始化方法,可通过此方法等参数传入AppKey等信息。1.8.8及之前版本的 JPush SDK只能通过PushConfig.plist配置AppKey等信息。

在你的工程中创建一个新的Property List文件,并将其命名为PushConfig.plist,文件所含字段如下:

  • CHANNEL

    • 指明应用程序包的下载渠道,为方便分渠道统计,具体值由你自行定义,如:App Store。
  • APP_KEY
    • 填写管理Portal上创建应用后自动生成的AppKey值。请确保应用内配置的 AppKey 与第1步在 Portal 上创建应用后生成的 AppKey 一致。
  • APS_FOR_PRODUCTION
    • 1.3.1版本新增,用于标识当前应用所使用的APNs证书环境。
    • 0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
    • 注:此字段的值要与Build Settings的Code Signing配置的证书环境一致。
  • 在1.2.2或之前版本的配置文件中,有 TEST_MODE 这个键,新版的SDK不再使用,可以将它删除。

PushConfig.plist文件示例图:

6、添加代码

2.1.0版本开始,API类名为JPUSHService,不再使用原先的APService。

允许XCode7支持Http传输方法

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

  <key>NSAppTransportSecurity</key>
      <dict>
  <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>

集成所需API

APIs 主要集中在 JPUSHService 接口类里。

  • 初始化JPush方法分为两个:

    • 1.8.8及以下版本使用的是已过期的初始化方法。升级到2.1.0的老用户仍可继续使用旧的初始化方法。
    • 2.1.0版本开始提供带appkey等参数的新初始化方法。使用此方法无需再添加PushConfig.plist配置JPush的AppKey等字段。

4.项目代码:

AppDelegate.h里面的代码:

#import<UIKit/UIKit.h>

staticNSString *appKey = @"4fd48a0712a3fde75eb1c7423";//申请应用成功以后官方会提供给你

staticNSString *channel = @"Publish channel";

staticBOOL isProduction = FALSE;

@interface AppDelegate :UIResponder <UIApplicationDelegate>

@property (strong,nonatomic) UIWindow *window;

@end

#import"AppDelegate.m"中的代码

#import "AppDelegate.h"

#import "JPUSHService.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

// Override point for customization after application launch.

self.window.backgroundColor = [UIColorwhiteColor];

[self.windowmakeKeyAndVisible];

if ([[UIDevicecurrentDevice].systemVersionfloatValue] >= 8.0)
{

//可以添加自定义categories

[JPUSHServiceregisterForRemoteNotificationTypes  UIUserNotificationTypeBadge |

UIUserNotificationTypeSound |

UIUserNotificationTypeAlert)

categories:nil];

} else {

//categories 必须为nil

[JPUSHServiceregisterForRemoteNotificationTypes  UIRemoteNotificationTypeBadge |

UIRemoteNotificationTypeSound |

UIRemoteNotificationTypeAlert)

categories:nil];

}

[JPUSHServicesetupWithOption:launchOptions appKey:appKey

channel:channelapsForProduction:NO];

returnYES;

}

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

// Required

[JPUSHServiceregisterDeviceToken:deviceToken];

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

// Required,For systems with less than or equal to iOS6

[JPUSHServicehandleRemoteNotification:userInfo];

}

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

// IOS 7 Support Required

[JPUSHServicehandleRemoteNotification:userInfo];

completionHandler(UIBackgroundFetchResultNewData);

}

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

//Optional

NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);

}

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

// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application
and it begins the transition to the background state.

// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

}

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

// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.

// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

}

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

// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.

}

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

// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

}

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

// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

}

@end

4.真机测试:

登陆到极光推送官网:  
    点击控制台:   

选择应用,也就是你创建测试的项目:我的项目是aa.TestPush

选中以后点击进入到下面这里:

点击上面的推送:

点击左边的发送通知,也可以选择自定义消息(这里我选择的发送通知):

这里我随便写点什么用我手机测试:

点击立即发送:

手机上的显示:

pushBUG常见处理方式

时间: 2024-11-07 11:52:28

iOS最新极光推送详解(2016转)的相关文章

iOS集成极光推送

iOS集成极光推送 一.配置APNs 苹果APNs(英文全称:Apple Push Notification Service) 1.配置开发证书 ![Uploading apns_13_803165.png -] 2.配置生产证书 和配置开发证书的流程相同. 3.将配置好的证书导出为 .p12 文件 一.注册极光推送帐号 可登录 极光推送官网 注册帐号. 注册成功后进入控制台 二.集成极光推送SDK sdk地址 我使用的是JPush-iOS-SDK-2.1.0.下载的文件里有个pdf文件iOS+

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解

spring websocket 和socketjs实现单聊群聊,广播的消息推送详解 WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而

iOS:极光推送控制器跳转

在前面已经做完了极光消息的推送,那么有消息了,如何跳转到需要的控制器呢?其实,主要还是在userInfo这个消息里面做判断来处理,具体如下: 下面这两个是远程推送时接收消息的方法,这是应用程序提供的方法,只要成功注册了极光推送,推送消息时,就会调用这两个方法,在这两个方法收到的userInfo消息做判断即可. // Required,For systems with less than or equal to iOS6 -(void)application:(UIApplication *)ap

IOS----友盟推送详解

这两天好好的研究了下推送这功能,关于它我将分成两部分来讲,一.IOS手机端,二.Servlet服务端,今天先讲下IOS端 一.感受 下面讲下我对推送这个功能在IOS下的感受,这个算是我做了服务端的功能和手机端的功能后的一个体会吧, 这功能在IOS上是多少给我带来了点鸡肋的感觉,首先很多时候收到推送有延时现象,还有如果连续推送两条消息给一个Iphone手机,如果遇到延时这个问题,那么第一条推送就会被覆盖.(这里我用的是友盟的推送,这个推送暂时感觉还不错,大多数推送能及时收到,至少我暂时测试是如此,

IOS 推送详解

一.关于推送通知 推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能.是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的.一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称apns)推送到设备的程序上. 推送的新消息可能是一条信息.一项即将到期的日程或是一份远程服务器上的新数据.在系统上展现的时候,可以显示警告信息或

iOS本地推送与远程推送详解

一.简介 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程序也不会弹出该提示框,需要用户到设置里面设置.一共有三种提示类型: UIUserNotificationTypeBadge:应用图标右上角的信息提示 UIUserNotificationTypeSound:播放提示音 UIUserNotificationTypeAlert:提示框 二.本地推送 1

iOS集成极光推送遇到的几个问题

1.APNs证书和主证书的区别 刚开始做推送的时候本来以为APNs证书就是主证书里加了个允许推送而已,事实证明我还是太天真了. 首先是创建Provisioning Profile文件时选择证书列表时是不能选择APNs证书的,而且在XCode里Code Signing也是不能选择的.APNs证书其实是只表示了有推送功能,主证书还是必不可少的.所以现在只是又添加了两个证书,其他的是不用变的,所以现在就有4个证书了.作为一个有轻微强迫症的人,创建完APNs证书就顺手把主证书删了,在这里让我折腾了好久.

推送原理解析 极光推送使用详解

推送原理解析 极光推送使用详解 原军锋 12016.09.22 18:10:07字数 5,705阅读 19,494 推送技术产生场景: --服务器端主动性: 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态; --数据实时性: 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据; --基本原理: 使客户端实时获取服务器端消息, Pull 方式, 小周期轮询, 费电费流量; 另一个就是 Push 方式

【Android应用开发】 推送原理解析 极光推送使用详解 (零基础精通推送)

作者 : octopus_truth 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/45046283 推送技术产生场景 : -- 服务器端主动性 : 客户端与服务器交互都是客户端主动的, 服务器一般不能主动与客户端进行数据交互, 因为服务器端无法得知客户端的 IP 地址 及 状态; -- 数据实时性 : 如果服务器端有紧急数据要传递给客户端, 就必须主动向客户端发送数据; -- 基本原理 : 使客户端实时获取服务器端消息,