相关疑难解决方法(0)

检测是否通过推送通知启动/打开了应用程序

是否可以知道应用程序是否通过推送通知启动/打开?

我猜这个发布活动可以在这里找到:

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

    if (launchOptions != nil) {
         // Launched from push notification
         NSDictionary *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    }
}
Run Code Online (Sandbox Code Playgroud)

但是,当应用程序处于后台时,如何检测到它是从推送通知中打开的?

push-notification apple-push-notifications uiapplicationdelegate ios ios6

162
推荐指数
10
解决办法
11万
查看次数

未调用iOS 10 UNUserNotificationCenterDelegate.推送通知无效

撕裂我的头发,以便在iOS10中使用推送通知.目前的设置:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool:

if #available(iOS 10.0, *) {

            let center = UNUserNotificationCenter.current()
            center.delegate = self
            center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in

                if error == nil {
                    print("DID REQUEST THE NOTIFICATION")
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }
            print("DID SET DELEGATE")
        }
Run Code Online (Sandbox Code Playgroud)

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data):

print("DID REGISTER FOR A REMOTE NOTIFICATION AND THE TOKEN IS \(deviceToken.base64EncodedString())"           
let request = UpdatePushNotificationSubscription_Request(deviceToken: deviceToken)
updatePushNotificationSubscriptionWorker.updateSubscription(request)
Run Code Online (Sandbox Code Playgroud)

我已经检查过令牌是否正确地上传到后端,它确实匹配.

我也实施了:

    @available(iOS 10.0, *) …
Run Code Online (Sandbox Code Playgroud)

apple-push-notifications ios swift

27
推荐指数
3
解决办法
2万
查看次数

我应该在哪种方法处理iOS远程通知?

我知道有很多次问过类似的问题.但是在阅读这些主题之后,我仍然非常困惑,特别UNUserNotificationCenter是在iOS 10中引入之后.

官方文档提到了我可以处理远程通知的3种方法:

  1. 实现userNotificationCenter:willPresentNotification:withCompletionHandler:在应用程序处于前台时处理通知.
  2. 执行userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:时,应用程序在后台或没有运行.
  3. 但文档还提到:在iOS和tvOS中,系统将通知有效负载传递给application:didReceiveRemoteNotification:fetchCompletionHandler:app委托的方法.

所以,

  • 要在应用程序处于后台/非活动状态时处理远程通知,我应该将我的代码放在3中的应用程序委托方法中,还是2中的notificationCenter委托中?由于UNUserNotificationCenter仅适用于iOS> 10,我应该编写不同的代码来处理每种情况吗?
  • 大约1,它仅在iOS 10之后可用.当iOS 10之前的应用程序在前台运行时,如何处理远程通知?

并且,更令人困惑的是:如果应用程序处于后台,则何时调用委托方法:何时收到通知消息?或者当用户点击通知时?

相关:iOS推送通知:当应用程序处于后台时,如何检测用户是否点击了通知?

notifications push-notification ios swift

15
推荐指数
1
解决办法
1587
查看次数

iOS/XCode:如何通过点击通知或跳板应用程序图标来了解该应用程序已启动?

我想知道是否有办法知道某个应用程序(可以在后台关闭或打开)是否已通过点击启动:

  • 通知(在通知中心)?
  • 或跳板上的应用程序图标?

谢谢 !!

notifications cocoa-touch push-notification ios

7
推荐指数
2
解决办法
5726
查看次数