当用户点击收到的推送消息时候,我但愿打开APP,而且跳转到对应的界面,这就须要在AppDelegate里面对代理方法进行处理。微信
当用户点击推送消息打开APP的时候会调用app
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
launchOptions中会有推送消息的userInfo信息,此时咱们能够经过函数
NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
获取到推送的内容;若是 remoteNotification 不为空,则说明用户是经过推送进入的APP,那么能够声明一个属性fetch
@property (nonatomic) BOOL isLaunchedByNotification;
用于标识用户是否经过点击通知消息进入本应用。此时,atom
- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
必定会被调用,iOS7可使用spa
- (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来通知不一样的展现方法。code
首先包含头文件视频
#import <AudioToolbox/AudioToolbox.h>
注册一段声音(本例中直接使用默认1007)server
@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开发