最近在使用JPush来完成公司的iOS App的推送需求,虽然没多难得东西,但这一路过来也是磕磕绊绊,在此记录下过程希望能为更多首次使用JPush的同行朋友有些帮助,也是对自己的一个备忘.
一.构建工程集成JPush SDK
Info.plist文件添加设置如下:
Property List 形式:
![]()
Source Code 形式:<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
1.2 导入SDK
在Podfile中添加 pod 'JPush' 使用Cocopods将JPush导入工程.并将必要的依赖库引入
必要的框架
- CFNetwork.framework
- CoreFoundation.framework
- CoreTelephony.framework
- SystemConfiguration.framework
- CoreGraphics.framework
- Foundation.framework
- UIKit.framework
- Security.framework
- Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib
- Adsupport.framework (获取IDFA需要;如果不使用IDFA,请不要添加)
二.创建JPush账号,添加相关代码
2.1 创建JPush账号
2.2 获取应用信息中的AppKey
2.3 插入相关代码
I.注册远程通知
在 AppDelegate.m 中的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中注册远程通知
//-- Set Notification
if ([application respondsToSelector:@selector(isRegisteredForRemoteNotifications)])
{
// iOS 8 Notifications
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:
UIUserNotificationTypeAlert |
UIUserNotificationTypeBadge |
UIUserNotificationTypeSound
categories:nil];
[application registerUserNotificationSettings:settings];
[application registerForRemoteNotifications];
}
else
{
// iOS < 8 Notifications
[application registerForRemoteNotificationTypes:
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound)];
}
II.注册JPush
[JPUSHService setupWithOption:launchOptions appKey:@"JPush应用信息里的AppKey" channel:nil apsForProduction:0];
apsForProduction参数0表示开发环境,1表示生产环境
III.上传DeviceToken到JPush,失败回调.
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
NSLog(@"DEVICE TOKEN IS %@",deviceToken);
[JPUSHService registerDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
NSLog(@"Register fail error = %@",error);
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
// 远程推送来的内容也就是userInfo.
NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
在未运行状态下,设备收到远程推送后会执行的方法是
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler;
![]()
钥匙串访问 -> 证书助理 -> 从证书颁发机构请求证书 -> (填邮箱)存储到磁盘.
![]()
![]()
我们回到刚才的网页Choose File 选择刚刚创建的空白证书 -> Continue -> DownLoad,这样就获得了针对该应用的推送证书.
![]()
双击刚刚下载的推送证书(aps_development.cer(开发证书),aps.cer(发布证书)),跳转到钥匙串应用.没跳转就自己打开,右键此证书导出,获得一个.p12文件密码自己设置(不能忘,后面会用到).
![]()
到这里证书的处理就告一段落了,JPush不需要再额外将p12文件导出为pem,证书导出PEM,再将两个PEM与起初申请用的空白证书合并成一个p12,所以我们直接用这个证书导出的p12文件就可以.
3.2 登陆 JPush官网 -> 控制台 -> 设置 -> 修改应用 -> 选择对应环境(开发 | 生产)上传证书并输入之前生成p12文件时设置的密码 -> 保存,到这里JPush的设置也完成了.
![]()
四. 开始调试
这里要注意,推送是不可以在模拟器上进行测试的,但是在真机上运行后发现后报出一个缺少描述文件的错误,这里是有由于推送除了证书外,在测试和打包上传时也要有对应的描述文件.
所以,我们再次登陆 Apple开发者中心 -> Account -> Certificates, Identifiers & Profiles -> 左侧 Provisioning Profiles(选择对应的环境 开发 | 发布)然后点击右上角的 " + "新建一个描述文件 ->选择对应环境 -> 对应的App ID -> 对应的证书 -> 对应的设备 -> 填描述文件名 -> DownLoad双击描述文件
![]()
![]()
描述文件弄好后,我们回到工程
工程左上角的工程名图标 -> Build Settings -> 搜索Code Signing,按照如下设置然后运行到移动设备上.登陆 JPush官网 -> 控制台 -> 推送 -> 编辑内容 -> 选择对应环境 -> 发送推送 -> 查看效果.
![]()
![]()
到此JPush的集成就结束了,文章中有那些错误或不足之处还请批评指正.
Thanks!