ios 开发之 -- 极光推送,发送自定义消息,进入制定页面
在进行极光推送时候,发现版本有所更新,以前截取didfinish入口方法里面的launchOptions,获取一个本地的通知内容,进行本地展示不可用了,通过查询官方文档和网上的资料才发现,方法改变了,具体方法如下(只针对怎样定义消息):
1,功能说明
只有在前端运行的时候才能收到自定义消息的推送。
从jpush服务器获取用户推送的自定义消息内容和标题以及附加字段等。
2,实现方法
获取iOS的推送内容需要在delegate类中注册通知并实现回调方法。
在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *) launchOptions 加入下面的代码:
- NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
- [defaultCenter addObserver:self selector:@selector(networkDidReceiveMessage:) name:kJPFNetworkDidReceiveMessageNotification object:nil];
实现回调方法:
- - (void)networkDidReceiveMessage:(NSNotification *)notification {
- NSDictionary * userInfo = [notification userInfo];
- NSString *content = [userInfo valueForKey:@"content"];
- NSDictionary *extras = [userInfo valueForKey:@"extras"];
- NSString *customizeField1 = [extras valueForKey:@"customizeField1"]; //服务端传递的Extras附加字段,key是自己定义的
- }
参数描述:
content:获取推送的内容
extras:获取用户自定义参数
customizeField1:根据自定义key获取自定义的value
更多实现参考 SDK下载压缩包中的 demo。
3,跳转目标页面方法的实现,在第二步的回调方法里面插入如下方法:
- [self getPushMessageAtStateActive:userInfo];
方法代码:
- #pragma mark -- 程序运行时收到通知
- -(void)getPushMessageAtStateActive:(NSDictionary *)pushMessageDic{
- UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@""
- message:[pushMessageDic objectForKey:@"content"]
- preferredStyle:UIAlertControllerStyleAlert];
- UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"查看"
- style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
- UIViewController *targetVC = [self topVC:[UIApplication sharedApplication].keyWindow.rootViewController];
- [targetVC.navigationController pushViewController:[[AuthenticationViewController alloc] init] animated:YES];
- }];
- UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消"
- style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
- }];
- [alertController addAction:confirmAction];
- [alertController addAction:cancelAction];
- [self.window.rootViewController presentViewController:alertController animated:YES completion:nil];
- }
- - (UIViewController *)topVC:(UIViewController *)rootViewController{
- if ([rootViewController isKindOfClass:[UITabBarController class]]) {
- UITabBarController *tab = (UITabBarController *)rootViewController;
- return [self topVC:tab.selectedViewController];
- }else if ([rootViewController isKindOfClass:[UINavigationController class]]){
- UINavigationController *navc = (UINavigationController *)rootViewController;
- return [self topVC:navc.visibleViewController];
- }else if (rootViewController.presentedViewController){
- UIViewController *pre = (UIViewController *)rootViewController.presentedViewController;
- return [self topVC:pre];
- }else{
- return rootViewController;
- }
- }
这样的话,就可以实现,点击弹出的alerview的确定按钮,进入指定的页面了!
--------------------------------------------------------------------------------------------------------------
上面说的是发送自定义消息的方法,这里来说下app在后台,或者不活跃状态时候的操作:
1,通知的三种形式:
- typedef NS_OPTIONS(NSUInteger, UNNotificationPresentationOptions) {
- UNNotificationPresentationOptionBadge = ( << ),
- UNNotificationPresentationOptionSound = ( << ),
- UNNotificationPresentationOptionAlert = ( << ),
- }
2,在此方法里面实现:
- // iOS 10 Support
- - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
- // Required
- NSDictionary * userInfo = response.notification.request.content.userInfo;
- if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
- [JPUSHService handleRemoteNotification:userInfo];
- }else is
{
//本地通知
}- completionHandler(); // 系统要求执行这个方法
- }
或者:
- - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
- // Required, iOS 7 Support
- [JPUSHService handleRemoteNotification:userInfo];
- NSLog(@"userinfo is %@",userInfo);
- UIViewController *targetVC = [self topVC:[UIApplication sharedApplication].keyWindow.rootViewController];
- targetVC.hidesBottomBarWhenPushed = YES;
- [targetVC.navigationController pushViewController:[[AuthenticationViewController alloc] init] animated:YES];
- completionHandler(UIBackgroundFetchResultNewData);
- }
一个是系统的方法,一个是极光的方法,本地化创建一个alertview也是可以实现,也可以直接在系统方法里面,进行操作,比如跳转到指定页面之类的都可以的!
在目标页面的话,如果底下的tabbar没有隐藏的话,可添加如下代码(仅做参考,隐藏的方法有很多):
- -(void)viewWillAppear:(BOOL)animated
- {
- self.tabBarController.tabBar.hidden = YES;
- }
- -(void)viewWillDisappear:(BOOL)animated
- {
- self.tabBarController.tabBar.hidden = NO;
- }
仅供参考,一些以官方文档为准!如果不正确的地方,欢迎指正!
附个极光的链接:
https://docs.jiguang.cn/jpush/client/iOS/ios_api/#api-ios
ios 开发之 -- 极光推送,发送自定义消息,进入制定页面的更多相关文章
- 李洪强iOS开发之极光推送JPush
李洪强iOS开发之极光推送JPush
- Android之极光推送发送自定义消息
Android端实现主要代码: <span style="font-size:14px;">import java.io.IOException; import jav ...
- 李洪强iOS之集成极光推送一iOS SDK概述
李洪强iOS之集成极光推送一iOS SDK概述 JPush iOS 从上图可以看出,JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 红色部分是 A ...
- 李洪强iOS之集成极光推送三iOS集成指南
李洪强iOS之集成极光推送三iOS集成指南 SDK说明 适用版本 本文匹配的 SDK版本:r2.1.5 以后.查看最近更新了解最新的SDK更新情况.使用Xcode 6及以上版本可以使用新版Push S ...
- 李洪强iOS之集成极光推送二iOS 证书 设置指南
李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...
- iOS开发:创建推送开发证书和生产证书,以及往极光推送官网上传证书的步骤方法
在极光官网上面上传应用的极光推送证书的实质其实就是上传导出的p12文件,在极光推送应用管理里面,需要上传两个p12文件,一个是生产证书,一个是开发证书 ,缺一不可,具体如下所示: 在开发者账号里面创建 ...
- 【原】iOS学习之极光推送
一.极光推送工程端 1.下载SDK 极光推送是一个推送消息的第三方,SDK下载:https://www.jpush.cn/common/products 集成压缩包内容:包名为JPush-iOS-SD ...
- iOS开发之远程推送
说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号,好咸蛋也差不多了,主要内容走起. 一.准备 ...
- [iOS]iPhone利用<极光推送>实现远程推送
准备: 1. 一个Xcode工程 2. 开发者账号 3. 真机 (重要,模拟器无法进行远程推送,因为模拟器没有UDID) 第一步:绑定工程的Bundle Identifer 首先当然要登录https: ...
随机推荐
- (一)maven之——maven基础及本地仓库的配置
一.初步了解maven Apache Maven是一个软件项目管理的综合工具.基于项目对象模型(POM)的概念,提供了帮助管理构建.文档.报告.依赖.发布等方法,Maven简化和标准化项目建设过程.处 ...
- 多对多关系数据库表 java描述
多对多关系 需要建立一张新表存放它们的对应数据 sql语句 create table teacher( id int primary key, name ), ,) ); create table s ...
- Android权限注解
Android应用程序在使用很多功能的时候必须在Mainifest.xml中声明所需的权限,否则无法运行.下面是一个Mainifest.xml文件的例子: <?xml version=" ...
- Android程序完全退出
有几个activity,有一需求是在一个activityA点击back键退出系统而不是跳到之前的activity 首先想到的是清空activityA的堆栈,使用intent.setFlag ...
- Java Socket网络编程Client端详解
此类实现客户端套接字(也可以就叫“套接字”).套接字是两台机器之间的通信端点. Socket client = new Socket(ip,port);//创建一个流套接字并将其连接到指定 IP 地址 ...
- C# Directory类的操作
Directory类位于System.IO 命名空间.Directory类提供了在目录和子目录中进行创建移动和列举操作的静态方法.此外,你还可以访问和操作各种各样的目录属性,例如创建或最后一次修改时间 ...
- 关于GridView Master-Detail 不支持明细属性为IEnumerable、IList问题
默认状态下gridview不支持接口集合,即不支持属性类型为IEnumerable<T>或者扩展的IList<T>,只能乖乖的转成List等实体集合,这种取舍就是鱼和熊掌了,如 ...
- 开发avr单片机网络资源
1.avr用的c语言标准库 http://www.nongnu.org/avr-libc/ 2.avr的下载上传器 http://www.nongnu.org/avrdude/ 3.编程环境platf ...
- 基于注解的ssh框架之spring配置文件
<?xml version="1.0" encoding="UTF-8"?> com.mysql.jdbc.Driver jdbc:mysql:// ...
- C#实现麦克风採集与播放
在网络聊天系统中.採集麦克风的声音并将其播放出来.是最基础的模块之中的一个.本文我们就介绍怎样高速地实现这个基础模块. 一. 基础知识 有几个与声音採集和播放相关的专业术语必需要先了解一下,否则.后面 ...