我有一些相当简单的事我想做.我将一个自定义数据附加到我处理的一些推送通知中
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Run Code Online (Sandbox Code Playgroud)
我寻找UIApplicationLaunchOptionsRemoteNotificationKey,并且它就是它.
如果我的应用程序是第一次启动,则只会调用该方法.如果我的应用程序在通知进入后已经在后台运行并且用户按下通知上的"查看"按钮,我该如何读取相同的密钥?我想将它们发送到特定的视图控制器,并在其上打开该数据,就像我第一次从通知中启动应用程序时一样.
我知道很多地方都有这个,但我无法弄清楚这一点.我使用Urban Airship进行推送通知.一切似乎都很好,除了当我的应用程序在后台时 - didReceiveRemoteNotification没有被调用.它在前台工作 - 我能够正确处理消息.如果从通知中心点击消息,我可以从启动选项获取消息.但是在后台,它发送的消息 - iOS显示警报 - didReceiveRemoteNotification未被调用.当我点击我的应用程序图标(而不是从通知中心内)时,应用程序会到达前台,我不知道通知存在.有任何想法吗?
我想在用户点击收到的推送通知消息时打开特定的视图控制器,但是当我收到推送通知消息并单击该消息时,只打开应用程序,但它不会重定向到特定的视图控制器.
我的代码是
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
if (applicationIsActive) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Bildirim"
message:[NSString stringWithFormat:@"%@ ",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]
delegate:self cancelButtonTitle:@"Ok"
otherButtonTitles:nil];
[alertView show];
UIViewController *vc = self.window.rootViewController;
PushBildirimlerim *pvc = [vc.storyboard instantiateViewControllerWithIdentifier:@"PushBildirimlerim "];
[vc presentViewController:pvc animated:YES completion:nil];
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题与iOS推送通知有关.
所以我现在正在尝试的是当应用程序在后台接收远程通知(或者可能从暂停状态唤醒)时播放消息.
应用程序从暂停模式唤醒后,声音根本无法播放.
当应用程序在前台时,在didReceiveRemoteNotification:调用方法后立即播放声音.
didReceiveRemoteNotification:当应用程序从挂起模式唤醒时调用方法时,立即播放声音的适当方法是什么?
这是一些代码(语音管理器类):
-(void)textToSpeechWithMessage:(NSString*)message andLanguageCode:(NSString*)languageCode{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *error = nil;
DLog(@"Activating audio session");
if (![audioSession setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker | AVAudioSessionCategoryOptionMixWithOthers error:&error]) {
DLog(@"Unable to set audio session category: %@", error);
}
BOOL result = [audioSession setActive:YES error:&error];
if (!result) {
DLog(@"Error activating audio session: %@", error);
}else{
AVSpeechUtterance *utterance = [AVSpeechUtterance speechUtteranceWithString:message];
[utterance setRate:0.5f];
[utterance setVolume:0.8f];
utterance.voice = [AVSpeechSynthesisVoice voiceWithLanguage:languageCode];
[self.synthesizer speakUtterance:utterance];
}
Run Code Online (Sandbox Code Playgroud)
}
-(void)textToSpeechWithMessage:(NSString*)message{
[self textToSpeechWithMessage:message andLanguageCode:[[NSLocale preferredLanguages] objectAtIndex:0]];
}
Run Code Online (Sandbox Code Playgroud)
后来在 …
objective-c ios avspeechsynthesizer background-mode avspeechutterance
你们大多数人都可能知道鹅卵石手表,这款手表会收到你手机推送通知.
他们能够接收一些通知.
我怎么能这样做?也许他们使用facebook api或类似的东西写了一些他们自己的通知.但是如何用短信和电话做到这一点?
你能收到什么通知?
根据didReceiveRemoteNotification,在后台,我们曾经能够通过点击推送通知上的操作按钮(或者在推送通知上滑动,取决于用户如何看到推送通知)来执行-application:didReceiveRemoteNotification:然后检查来处理用户打开应用程序在方法内部,应用程序是否applicationState未激活.
在iOS 7中,有新的remote-notification后台模式,允许应用程序在向用户显示远程通知时执行后台获取(用户无需对通知执行任何操作).要支持此模式,您应该实现该-application:didReceiveRemoteNotification:fetchCompletionHandler:方法.
文档-application:didReceiveRemoteNotification:说明如果您的应用程序委托实现该application:didReceiveRemoteNotification:fetchCompletionHandler:方法,那么"app对象将调用该方法而不是此方法".这意味着我们不能再-application:didReceiveRemoteNotification:用来处理远程通知,因为它不会被调用.
我们应该把处理逻辑放进去application:didReceiveRemoteNotification:fetchCompletionHandler:,但之前处理它的技巧不再有意义 - 以前,我们依赖的事实是,-application:didReceiveRemoteNotification:当应用程序不活动时调用的唯一方法是用户点击了打开应用程序的通知上的操作按钮.但是,现在,remote-notification后台模式的重点在于,application:didReceiveRemoteNotification:fetchCompletionHandler:每次收到远程通知时,它都可以在后台调用,然后用户对其执行任何操作.
那么,我们现在怎样才能告诉用户何时使用通知上的操作按钮打开应用程序?
我想知道如何能够在iOS中阅读并获取其他应用程序推送通知的内容.例如来自Facebook Messenger或Twitter的推送通知.
我知道这是可能的,因为这正是Pebble Smartwatch iOS应用程序所做的.它拦截了iPhone的推送通知,并通过蓝牙将它们发送到智能手表.
objective-c push-notification apple-push-notifications ios pebble-watch
ios ×7
objective-c ×2
pebble-watch ×2
appdelegate ×1
cocoa-touch ×1
ios7 ×1
multitasking ×1
push ×1
xamarin.ios ×1