当应用程序在后台运行时,在 iOS appDelegate didReceiveRemoteNotification 中



当我的应用程序在后台运行时,我正在尝试通过调用 lambda 函数来响应远程推送通知来获取数据。 我的通知配置正确,并且当应用程序在后台运行时调用 didReceiveRemoteNotification。

我在该方法中有以下代码:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    let lambdaInvoker = AWSLambdaInvoker.default()

    lambdaInvoker.invokeFunction("lambdaFunctionName", jsonObject: jsonObject).continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in
        if let error = task.error as NSError? {
            print(task.error!.localizedDescription)
            print(task.error!)
            DispatchQueue.main.async(execute: {
                if (error.domain == AWSLambdaInvokerErrorDomain) && (AWSLambdaInvokerErrorType.functionError == AWSLambdaInvokerErrorType(rawValue: error.code)) {
                    print("Function error: (String(describing: error.userInfo[AWSLambdaInvokerFunctionErrorKey]))")
                } else {
                    print("Error: (error)")
                }
            })
            return nil
        }
        // Handle response in task.result
        DispatchQueue.main.async(execute: {
            if let jsonArray = task.result as? NSArray {
                // do stuff
            }
        })
        return nil
    })
}

但是,该块不会在 lambda 函数中执行。 我以前没有使用过后台提取,也不确定如何使用 lambda 函数使其工作。

我缺少的是完成处理程序。 添加后,代码和块将按预期执行:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    let lambdaInvoker = AWSLambdaInvoker.default()

    lambdaInvoker.invokeFunction("lambdaFunctionName", jsonObject: jsonObject).continueWith(block: {(task:AWSTask<AnyObject>) -> Any? in
        if let error = task.error as NSError? {
            print(task.error!.localizedDescription)
            print(task.error!)
            DispatchQueue.main.async(execute: {
                if (error.domain == AWSLambdaInvokerErrorDomain) && (AWSLambdaInvokerErrorType.functionError == AWSLambdaInvokerErrorType(rawValue: error.code)) {
                    print("Function error: (String(describing: error.userInfo[AWSLambdaInvokerFunctionErrorKey]))")
                    completionHandler(UIBackgroundFetchResult.newData)
                } else {
                    print("Error: (error)")
                    completionHandler(UIBackgroundFetchResult.newData)
                }
            })
            return nil
        }
        // Handle response in task.result
        DispatchQueue.main.async(execute: {
            if let jsonArray = task.result as? NSArray {
                // do stuff
                completionHandler(UIBackgroundFetchResult.newData)
            }
        })
        return nil
    })
}

相关内容

  • 没有找到相关文章

最新更新