当前位置: 首页 > news >正文

点击推送消息跳转处理(iOS)

  当用户点击收到的推送消息时候,我希望打开APP,并且跳转到对应的界面,这就需要在AppDelegate里面对代理方法进行处理。

  当用户点击推送消息打开APP的时候会调用

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

  launchOptions中会有推送消息的userInfo信息,此时我们可以通过

NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

  获取到推送的内容;如果 remoteNotification 不为空,则说明用户是通过推送进入的APP,那么可以声明一个属性

@property (nonatomic) BOOL isLaunchedByNotification;

  用于标识用户是否通过点击通知消息进入本应用。此时,

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

  一定会被调用,iOS7可以使用

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

  因为此方法的调用时,MainViewController已经被初始化,所以我们已经可以在MainViewController注册推送消息的监听,用于展示对应的视图,如下:

//订阅展示视图消息,将直接打开某个分支视图
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(presentView:) name:@"PresentView" object:nil];//弹出消息框提示用户有订阅通知消息。主要用于用户在使用应用时,弹出提示框
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showNotification:) name:@"Notification" object:nil];

  所以在AppDelegate的didReceiveRemoteNotification中可以通过判断isLaunchedByNotification来通知不同的展示方法。

 

  一个推送来临时,播放震动声音不停止的代码,不是播放音乐哦

  首先包含头文件

 #import <AudioToolbox/AudioToolbox.h>

  注册一段声音(本例中直接使用默认1007)

@property (nonatomic, assign) SystemSoundID soundID;

NSString *path = [[NSBundle mainBundle] pathForResource:soundName ofType:nil];
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)[NSURL fileURLWithPath:path], &_soundID);

    AudioServicesAddSystemSoundCompletion(_soundID, NULL, NULL, soundCompleteCallback, NULL); // 核心代码 可重复执行
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    AudioServicesPlaySystemSound(_soundID);

// block 用于 AudioServicesAddSystemSoundCompletion(_soundID, NULL, NULL, soundCompleteCallback, NULL); 函数调用
void soundCompleteCallback(SystemSoundID soundID,void * clientData)
{
    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    AudioServicesPlaySystemSound(soundID);
}

// 停止播放
-(void)stopAlertSoundWithSoundID:(SystemSoundID)soundID 
{
    AudioServicesDisposeSystemSoundID(kSystemSoundID_Vibrate);
    AudioServicesDisposeSystemSoundID(soundID);
    AudioServicesRemoveSystemSoundCompletion(soundID);
}

 

 

  增加一个小技巧,微信与好友开视频的推送,当微信应用到后台的时候,也可能是被kill了,本人很奇怪,为什么这个推送通知,声音和震动可以不停下来,一直提醒用户,而且iOS8上顶部的通知横幅也是一直显示,直到用户点击之后进入微信应用才会停止,这个是怎么做到的?

  其实用一个小于30s的音频文件就搞定了

 

 

 

 

 

 

本文参考微信公众号:iOS开发

  

转载于:https://www.cnblogs.com/jw-blog/p/5223485.html

相关文章:

  • 2.C#中泛型在方法Method上的实现
  • 简单的苗为课堂搜索版式编写《超链接》
  • 深入字节码 -- 计算方法执行时间
  • Building QT projects from the command line
  • http 状态码(转载)
  • 集成Diagram Viewer跟踪流程
  • PHP 7.0.4 Windows升级
  • 发现一个nginx LUA开发Web App的框架
  • golang笔记——string
  • 【转】Android Support v4、v7、v13的区别和应用场景
  • 【HDOJ】4326 Game
  • js 定义类对象
  • Android 解决onInterceptTouchEvent只能拦截到Down事件
  • 本地使用SVN编辑发布远程SAE工程
  • Oracle_spatial的空间操作符介绍
  • [译]前端离线指南(上)
  • 11111111
  • 2019年如何成为全栈工程师?
  • Android组件 - 收藏集 - 掘金
  • Bytom交易说明(账户管理模式)
  • CentOS 7 防火墙操作
  • ES学习笔记(12)--Symbol
  • Java 23种设计模式 之单例模式 7种实现方式
  • jquery cookie
  • JS专题之继承
  • Nodejs和JavaWeb协助开发
  • oldjun 检测网站的经验
  • PHP的Ev教程三(Periodic watcher)
  • Python 反序列化安全问题(二)
  • React-redux的原理以及使用
  • React-生命周期杂记
  • Sublime text 3 3103 注册码
  • 分享一份非常强势的Android面试题
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 网页视频流m3u8/ts视频下载
  • 延迟脚本的方式
  • 异步
  • 你对linux中grep命令知道多少?
  • MyCAT水平分库
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • ###C语言程序设计-----C语言学习(6)#
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • $.ajax()
  • (javascript)再说document.body.scrollTop的使用问题
  • (poj1.3.2)1791(构造法模拟)
  • (python)数据结构---字典
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)u-boot-nand.bin的下载
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)http协议
  • .htaccess配置重写url引擎
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • @Bean注解详解
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚