OC 教程 极光推送
一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络,希望未来技术之巅上有你们也有我。
说明:今天打算写一下极光推送的整个过程,在编写的时候已经录制了视频,不过这个视频是留给未来的我看的,今年准备自学Pyhton,视频不打算分享,里面涉及项目的隐私资料,我把整个重要的过程用图片的形式写出来。
OC 项目底层框架(万能)
官网极光推送ios开发文档
视频位置:
印象笔记
说明一下:测试的时候要用真机测试,不然模拟器无法推送。
马上开始:
注意:下面讲的在苹果官网上面申请推送证书的时候,App是没有上架的情况下先配置项目描述文件。如果项目是已经上架了,再去做极光推送功能的话。只要在点击进项目描述文件把推送功能打开,直接创建开发SSL证书跟生产SSL证书就可以了。
如果App上架打开推送功能 看下面
上线的图片创建创建开发SSL证书跟生产SSL证书的时候如果没有需要你上存SCR证书的步骤就需要注意,我在2019年配置的时候在上线的两张图片点进去配置发现缺少不需要你上存SCR证书。这个是系统的BUG,SCR证书是一定要上存。如果发现缺少上存SCR证书的时候可以到配置证书哪里配置。详见下面 问题1 有详细步骤
重点:极光推送的主要流程
1.上苹果网站上面创建一个AppID,来绑定你项目里面的BundleID
2.然后在自己的电脑上面生成一个SCR文件
3.上苹果网站上面创建一张开发推送证书和发布推送证书(这两张证书在创建的过程中会用到SCR文件)
4.两张证书完成之后下载下来双击安装。在钥匙串里面可以看到已经安装的两张证书。分别右击导出p12文件。
5.上极光网站申请当前项目的app应用。把两张证书填写进去。就ok了,会生成一个appKey.会用到项目里面去。
6.在项目里面的设置两个地方,都是打开推送的按钮。具体看下面。
7.在AppDelegate里面写代码.
下面讲的就是围绕上面的7点展开说明:
1.上苹果网站上面创建一个AppID,来绑定你项目里面的BundleID。
这个就是你得开发者账号,一般到公司工作,公司都会给你一个开发者账号的。无就用公司的企业邮箱申请一个。
2.然后在自己的电脑上面生成一个SCR文件
3.上苹果网站上面创建一张开发推送证书和发布推送证书(这两张证书在创建的过程中会用到SCR文件)
3.1先申请项目描述文件。
往下拉
步骤2
AppID配置好之后就配置推送证书
4.两张证书完成之后下载下来双击安装。在钥匙串里面可以看到已经安装的两张证书。分别右击导出p12文件。
5.上极光网站申请当前项目的app应用。把两张证书填写进去。就ok了,会生成一个appKey.会用到项目里面去。
回到项目
6.在项目里面的设置两个地方,都是打开推送的按钮。具体看下面。
7.在AppDelegate里面写代码.
代码
// 引入 JPush 功能所需头文件
#import "JPUSHService.h"//20220110测试过只需要引入这个就可以了
/*iOS10 注册 APNs 所需头文件 记得必须添加<UserNotifications/UserNotifications.h>,否则无法监听APNS 是苹果内推 极光推送的实际也是最后通过苹果推送的.当App启动a拿到deviceToken之后要把deviceToken传到极光SDK.不然关屏或者前台无法收到推送消息,因为这个消息是属于苹果推送的,*/
#ifdef NSFoundationVersionNumber_iOS_9_x_Max//20220110测试过可以不写
#import <UserNotifications/UserNotifications.h>//20220110测试过可以不写
#endif//20220110测试过可以不写
//
/*
好像没有用 等待验证IDFA是苹果官方唯一允许广告获取用户的信息 这个暂时用不上如果需要使用 idfa 功能所需要引入的头文件(可选)*/
#import <AdSupport/AdSupport.h>//20220110测试过可以不写<JPUSHRegisterDelegate>didFinishLaunchingWithOptions代理方法写一下的内容//极光推送 JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];if (@available(iOS 12.0, *)) {entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;} else {// Fallback on earlier versions}if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {// 可以添加自定义 categories}[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];//apsForProduction :NO(测试开发环境) YES(生产环境)[JPUSHService setupWithOption:launchOptions appKey:@"000000000000000000" channel:@"AAA channel" apsForProduction:YES];//注册远端消息通知获取device token[application registerForRemoteNotifications];//保存registrationID 登录成功上存到服务器[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//记录极光注册ID[LoginUserInfo new].JPUSHRegistID = registrationID;}];/**在applicationWillEnterForeground方法(App即将进入前台)中将小红点清除*/
- (void)applicationWillEnterForeground:(UIApplication *)application {NSLog(@"进入前台");[UIApplication sharedApplication].applicationIconBadgeNumber = 0;[application cancelAllLocalNotifications];
}#pragma mark- JPUSHRegisterDelegate
// iOS 12 Support 好像没有用 等待验证
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification API_AVAILABLE(ios(10.0)){if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {//从通知界面直接进入应用NSLog(@"从通知界面直接进入应用");}else{//从通知设置界面进入应用NSLog(@"从通知设置界面进入应用");}
}// iOS 10 Support 1 当前应用进来
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler API_AVAILABLE(ios(10.0)){// RequiredNSDictionary * userInfo = notification.request.content.userInfo;if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[JPUSHService handleRemoteNotification:userInfo];}[[JPushManager sharedManager] responseResult:userInfo];//全局勾选代理,需要自己子定义的// 需要执行这个方法,选择是否提醒用户,有 Badge(标记)、Sound(声音)、Alert(弹窗现实5秒) 三种类型可以选择设置completionHandler(UNNotificationPresentationOptionSound);//选择声音 因为我用自定义框 如果选择Alert会重复a弹框
}// iOS 10 Support 2 解锁屏幕进来
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler API_AVAILABLE(ios(10.0)){// RequiredNSDictionary * userInfo = response.notification.request.content.userInfo;if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[JPUSHService handleRemoteNotification:userInfo];}completionHandler(); // 系统要求执行这个方法
}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {//发送通知 感觉无用的这句话[[NSNotificationCenter defaultCenter] postNotificationName:@"showRedBadge" object:nil userInfo:userInfo];// Required, iOS 7 Support[JPUSHService handleRemoteNotification:userInfo];completionHandler(UIBackgroundFetchResultNewData);}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {// Required,For systems with less than or equal to iOS6[JPUSHService handleRemoteNotification:userInfo];
}// 将得到的deviceToken传给SDK
/*温馨提示:JPush 3.0.9 之前的版本,必须调用此接口,注册 token 之后才可以登录极光,使用通知和自定义消息功能。从 JPush 3.0.9 版本开始,不调用此方法也可以登录极光。但是不能使用 APNs 通知功能,只可以使用 JPush 自定义消息。*/
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{[JPUSHService registerDeviceToken:deviceToken];
}
问题1:
2019年新的配置画面
配置开发证书
问题2:
遇到一个问题。就是测试的能够推送,正式发布之后收不了推送.
首先说明一下,不管公司当前是正式服还是测试服,凡是通过XCode写进手机的程序都是属于开发模式。苹果用的证书是开发证书
下面一个一个可能进行排除
通过AppStore下载下来的程序,App用的是发布证书.
极光推送分两种推送的,一种是测试时候用的开发模式(用于测试的推送).另一种是上架AppStore生产模式用的(正式发布),所以上架的时候需要注意下面apsForProduction的参数设置。
//apsForProduction :NO(测试开发环境) YES(生产环境)
[JPUSHService setupWithOption:launchOptions appKey:@"000000000000000000000" channel:@"AAAAA channel" apsForProduction:YES];
造成这次的原因主要是上面的问题,上架的时候记得改为YES。测试可以改为NO。然后用蒲公英测试再打包.
但是改了也是都不行。后来发现缺小了下面的一句话.
// 将得到的deviceToken传给SDK
/*温馨提示:JPush 3.0.9 之前的版本,必须调用此接口,注册 token 之后才可以登录极光,使用通知和自定义消息功能。从 JPush 3.0.9 版本开始,不调用此方法也可以登录极光。但是不能使用 APNs 通知功能,只可以使用 JPush 自定义消息。*/
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{[JPUSHService registerDeviceToken:deviceToken];
}
然后又改了注册设置极光的代码.
//极光推送 JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];if (@available(iOS 12.0, *)) {entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;} else {// Fallback on earlier versions}if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {// 可以添加自定义 categories}[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];//apsForProduction :NO(测试开发环境) YES(生产环境)[JPUSHService setupWithOption:launchOptions appKey:@"000000000000000000000000" channel:@"Publish channel" apsForProduction:YES];//注册远端消息通知获取device token[application registerForRemoteNotifications];//保存registrationID 登录成功上存到服务器[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//记录极光注册ID[LoginUserInfo new].JPUSHRegistID = registrationID;}];
退出极光登录 用于指定用户推送的
[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {NSLog(@"极光推送别名退出 rescode: %ld, \ntags: %@, \nalias: %@\n", (long)iResCode, @"tag" , iAlias);
}
然后有升级了极光最新的版本.
pod update
pod install
下面的证书要一一对应
如果有问题可以看看苹果官网上的项目是否配置证书
项目对应选择的证书
检查电脑安装项目的推送证书并且还没有过期
极光推动验证通过
关于网上设置可以访问http的问题
开启极光推送
问题3:如何使用别名指定推送
使用指定别名推送 可能是后台做的 因为找不到传送手机号码的代码 我别名发送拿货的项目是写手机号码就可以了,但无发现前端传送过手机号码,应该是后台写的, 看看下面的代码行不行 但拿货的项目没有写过这样的话。
写在登录按键的地方
// 设置极光推送的标签和别名(标签是一个集合可以包含多个关键词 比如:红的、黄的、绿的)(别名是每个用户唯一的名称可以 根据这个别名给唯一的用户发推送)
NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:@"xxx",nil, nil]; // 标签NSString *registrationIdStr = registrationID; // 别名[JPUSHService setTags:set alias:registrationIdStr callbackSelector:@selector(tagsAliasCallback:tags:alias:) object:self];//写后接口的时候 调用后台接口 把registrationIdStr传给后台// 极光推送 标签和别名设置成功回调
- (void)tagsAliasCallback:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias {NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, tags , alias);
}
手动集成极光推送
手动集成视频
我已经把极光的SDK需要的文件已经打包好了,直接下载拖进项目里面就可以了:https://download.csdn.net/download/weixin_38716347/75223834
1.官网的对接网站:https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/
2.对接之前首先先把SDK下载下来:https://docs.jiguang.cn/jpush/resources/
把它复制出来放到项目里面,例如:看下面的图片
3.添加添加 Framework
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
libz.tbd
UserNotifications.framework
libresolv.tbd
WebKit.framework
StoreKit.framework
4.打开对应的功能
5.在info.plist里面进行设置
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
这样子手动集成就完成了。
极光控制台上面推送消息
首先先登录极光官网,账号密码在iOS文件里面有,然后按照下面的步骤一步一步来就可以了。
这样子的话,发送出去,手机就能够收到消息了。
问题4:如何指定推送
在代码里面需要在didFinishLaunchingWithOptions调用下面的方法拿到registrationID。
//保存registrationID 登录成功上存到服务器
[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//记录极光注册IDNSLog(@"registrationID: %@",registrationID);
}];
回到极光的控制台,把拿到的注册ID填进去就可以针对用户推送了。
这样子也能够针对个人推送成功的。
我们拿到的这个registrationID需要把它上存到后台里面的,然后后台会把我们的用户信息绑定起来,例如跟手机号码捆绑在一起的,到时候我们可以通过手机号码指定推送给用户,到时候我们用手机号码推送给用户的时候需要在下面的框里面去写
关于别名推送在问题三也有体过的。
OC 教程 极光推送相关推荐
- 极光IM使用教程-极光推送
链接地址:http://jingyan.baidu.com/article/a948d65178a6ea0a2ccd2e7e.html 极光IM使用教程,如果您的 App 需要同时集成 Push 功能 ...
- 跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程
文章目录 一.前言 二.资源 三.集成 四.遇到的问题及解决措施 4.1 IOS开发者证书无推送权限 4.2 manifest中并没有配置push模块.但云端打包ios就是一直报Code Signin ...
- 极光推送在APICloud平台的使用教程
推送服务是app应用中非常重要的一个服务,尤其对于app开发者而言,没有什么途径比消息推送更能直接.即时地触及到目标用户群体.根据相关数据显示,通过推送服务可以显著提升app的用户粘性和活跃度. 下面 ...
- 跨平台应用开发进阶(八) :uni-app 实现Android原生APP-云打包集成极光推送(JG-JPUSH)详细教程
文章目录 一.前言 二.资源 三.集成 3.1 SDK 引入 3.2 代码集成 3.3 遇到的问题及解决方案 3.3.1 包大小限制 3.3.2 [JS Framework] 当前运行的基座不包含原生 ...
- Flutter极光推送集成小米厂商通道【教程】
极光推送官方已经开发出Flutter版的插件,地址:https://pub.dev/packages/jpush_flutter 在Flutter项目里面的pubspec.yaml里面依赖极光推送:j ...
- php集成jpush教程,Laravel 集成 JPush 极光推送指北
我是一个 Laravel 小白,我是一个 Laravel 小白,我是一个 Laravel 小白(默念三遍再往下读,如果非小白就不用看了). Laravel 使用 Composer 来管理代码依赖.所以 ...
- php极光推送教程,laravel框架使用极光推送消息操作示例
本文实例讲述了laravel框架使用极光推送消息.分享给大家供大家参考,具体如下: 最近需要使用极光推送往客户端推消息,所以这里记录下使用过程. 极光推送的服务端文档: https://docs.ji ...
- Spring Boot入门教程(五十三): 极光推送Java-SDK
pom.xml <!-- 极光推送 begin --> <dependency><groupId>cn.jpush.api</groupId><a ...
- Java中集成极光推送实现给Android提送消息通知(附代码下载)
场景 Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...
- JPush (极光推送) For Xamarin.Android
http://www.cnblogs.com/xling/p/JPush-for-Xamarin-Android.html 官方教程上讲的是 GCM (Google Cloud Messaging) ...
最新文章
- 五角大楼公布UFO报告,不明飞行物到底是什么?(全文)
- 444牛X的日常口语
- 脆弱的Scrum,敏捷在哪里?
- Android热修复原理,已整理成文档
- Python 技巧篇-如何避免python报错导致强制关闭窗口
- 查看java源码时出现class文件而不是java文件,可能是因为java的安装路径下没有src.zip文件而是javafx-src.zip文件
- 使用shell脚本监控共享池内存碎片
- 博客搜索引擎索引博文数量分析与评估
- 智能集群理论优化控制_探索群体智能的奥妙——ROB-MAS多智能体协作
- matlab 图像 幅度谱 低通滤波_数字图像处理期末复习2018-12-21
- VB 遍历指定目录及子目录所有文件函数
- k8s部署jar包_K8S部署SpringBoot应用_都超的博客-CSDN博客_k8s springboot
- Arcface训练vgg2face数据集——数据制作
- 单文件PHP版视频解析源码(中间件)
- 运动会加油稿计算机学院150字,学校运动会加油稿150字10篇
- jmeter+ant+jenkins接口自动化测试框架
- 抖音微信登录服务器繁忙,微信登录抖音失败解决方法介绍
- 来扯点ionic3[3] 页面的生命周期事件,也就是凡间所说的钩子
- QTextEdit只接受数字输入
- Apollo配置说明