什么之间的区别print,NSLog以及println何时该使用的呢?
例如,在Python中,如果我想打印字典,我只是print myDict,但现在我有2个其他选项.我应该如何以及何时使用它们?
关于这个主题有很多stackoverflow线程,但我仍然没有找到一个好的解决方案.
如果应用程序不在后台,我可以launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]通过application:didFinishLaunchingWithOptions:电话查看它是否从通知中打开.
如果应用程序在后台,则所有帖子都建议使用application:didReceiveRemoteNotification:并检查应用程序状态.但是当我进行实验时(以及此API的名称建议),此方法在收到通知时被调用,而不是被点击.
所以问题是,如果应用程序启动然后背景化,并且您知道收到通知application:didReceiveNotification(此时application:didFinishLaunchWithOptions:不会触发),您如何知道用户是通过点击通知还是仅通过点击来恢复应用程序应用图标?因为如果用户点击了通知,则期望打开该通知中提到的页面.否则它不应该.
我可以handleActionWithIdentifier用于自定义操作通知,但这仅在轻触自定义操作按钮时触发,而不是在用户点击通知主体时触发.
谢谢.
编辑:
在阅读下面的一个答案之后,我想通过这种方式我可以澄清我的问题:
我们如何区分这两种情况:
(A)1.app转到后台; 2.收到通知; 3.用户点击通知; 4. app进入前台
(B)1.app转到后台; 2.收到通知; 3.用户忽略通知并稍后点击应用程序图标; 4. app进入前台
因为application:didReceiveRemoteNotification:在步骤2中两种情况都被触发.
或者,应application:didReceiveRemoteNotification:仅在步骤3中针对(A)触发,但我以某种方式将我的应用程序配置错误,所以我在第2步看到它?
我正在尝试处理启动选项并在点击我在swift 3中收到的远程通知时打开一个特定的视图控制器.我已经看到类似的问题,例如这里,但没有新的swift 3实现.我看到了一个类似的问题(和)在AppDelegate.swift中我在didFinishLaunchingWithOptions中有以下内容:
var localNotif = (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as! String)
if localNotif {
var itemName = (localNotif.userInfo!["aps"] as! String)
print("Custom: \(itemName)")
}
else {
print("//////////////////////////")
}
Run Code Online (Sandbox Code Playgroud)
但是Xcode给了我这个错误:
Type '[NSObject: AnyObject]?' has no subscript members
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
if let launchOptions = launchOptions {
var notificationPayload: NSDictionary = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as NSDictionary!
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
error: ambiguous reference to member 'subscript'
Run Code Online (Sandbox Code Playgroud)
我有类似的错误,无论我以前使用类似的代码通过键从字典中获取值,我不得不替换代码,基本上安全地首先解开字典.但这似乎不适用于此.任何帮助,将不胜感激.谢谢.
ios firebase swift firebase-cloud-messaging firebase-notifications
检测应用程序是否通过推送通知启动/打开,描述了如何通过用户点击推送通知来检测本机iOS应用程序是否已打开(即启动或仅启动).
我如何在React Native中做同样的事情?PushNotificationIOS让我附上通知听众......
PushNotificationIOS.addEventListener('notification', function (notification) {
console.log('got a notification', notification);
});
Run Code Online (Sandbox Code Playgroud)
但是当应用程序在前台收到推送通知时,以及当我通过推送通知打开应用程序时,这都会触发.
如何特别检测第二种情况?
我application:didReceiveRemoteNotification:fetchCompletionHandler:在我的应用程序委托中实现了响应推送通知.
当应用程序在后台时收到通知时,会立即调用此方法,并在完成后获取新数据并执行完成块.全部按照文档.但是,如果我点击通知警报,则会再次调用此方法,从而导致另一个网络调用和UI更新.我希望每个推送通知都会调用一次此方法,而不是一次收到,再次执行操作.
其他人如何实施这种方法?
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[self loadSomeResource:^(NSData *data,NSError *error){
if (error) {
completionHandler(UIBackgroundFetchResultFailed);
}
else if (data){
completionHandler(UIBackgroundFetchResultNewData);
}
else {
completionHandler(UIBackgroundFetchResultNoData);
}
}];
}
Run Code Online (Sandbox Code Playgroud) 以编程方式将用户发送到设置屏幕后,左上角有一个返回应用按钮:
点击此按钮可以让用户返回我的应用程序.但是,此时Application调用其委托时使用的方法与从后台返回时调用的方法相同:
applicationWillEnterForeground
和
applicationDidBecomeActive
同时,我需要通过点击这个特定的"返回应用程序"按钮来区分用户是否回到应用程序,或者通过以任何其他方式将其发送到后台后简单地输入应用程序.这有点可能吗?
在我当前的项目中,我有一个推送通知.当我点击应用程序图标时,我想从启动选项对象获取收到的通知,但它总是返回nil:
NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
Run Code Online (Sandbox Code Playgroud) 如果您下载Telegram App或其他消息应用程序,您将看到当您进入应用程序时(应用程序状态处于活动状态),当有人给您发消息时,它会在屏幕顶部的应用程序内显示自定义通知.当您触摸该自定义通知时,它会将您重定向到聊天屏幕.
但是当应用程序处于非活动状态时(应用程序处于后台),您可以在应用程序外部获得聊天通知,可能是在锁定屏幕或其他应用程序上.如果您触摸它,它将打开应用程序并将您重定向到聊天屏幕,而无需应用程序内自定义通知.
要做到这一点,我想我应该知道如何确定通知是否打开了应用程序.问题,如何确定应用程序是从通知中打开还是当前处于活动状态?
objective-c push-notification apple-push-notifications ios swift
ios ×7
swift ×4
objective-c ×3
cocoa-touch ×1
console ×1
debugging ×1
firebase ×1
ios7 ×1
logging ×1
react-native ×1