iOS-点击推送消息跳转处理

本文介绍如何在iOS应用中处理用户通过点击推送消息进入应用的情况,包括如何获取推送消息的内容、设置标识符以及如何在MainViewController中注册推送消息的监听。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当用户通过点击通知消息进入应用时

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

launchOptions

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

NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

获得推送消息内容。如果remoteNotification不为空,则说明用户通过推送消息进入,那么可以声明一个属性

@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);
}



 

转载于:https://www.cnblogs.com/jgCho/p/5381604.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值