【问题标题】:ios Handoff missing NSUserActivity in launchOptions?ios Handoff 在launchOptions 中缺少NSUserActivity?
【发布时间】:2016-08-16 00:08:12
【问题描述】:

我已经在我们的应用程序中实现了 Handoff,当应用程序在前台或后台运行时,它在 web 到应用程序的切换以及反之亦然工作正常。

但是,如果应用程序没有运行,那么如果用户从 web 启动应用程序到应用程序切换,在 launchOptions 字典中,我会得到 UIApplicationLaunchOptionsUserActivityDictionaryKey,但缺少对活动的引用。

看截图:

如您所见,我只获得了 NSUserActivity 的 ID。 这是 iOS 9 中的错误吗?

有没有办法通过使用 id 来获取对活动的引用?

编辑,这里是代码,虽然我不认为这是相关的

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    if (launchOptions && [[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) {
        __block NSUserActivity *activity;

        NSDictionary *userActivityDictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsUserActivityDictionaryKey];
        if (userActivityDictionary) {
            [userActivityDictionary enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
                if ([obj isKindOfClass:[NSUserActivity class]]) {
                    activity = obj;
                }
            }];
        }

        //app was started by URL (deep linking), check parameters
        if (activity) {
            NSURL *url = activity.webpageURL;
            //resume from URL
        }
    }

    return YES;
}

【问题讨论】:

  • 嘿左撇子;你能分享你试过的代码吗!
  • @SuhasPatil 添加了代码,虽然我认为这无关紧要
  • 代码看起来不错,您是否尝试过使用另一种方法 (BOOL)application:continueUserActivity:restorationHandler 并检查您提供的活动类型的 plist。
  • 应用程序终止时不会调用application:continueUserActivity:restorationHandler 委托。如果应用程序在后台并且用户从切换中恢复,则正在调用该委托并且我没有问题。我的问题是应用程序何时终止。是的,在 plist 文件中,活动类型已在 NSUserActivityTypes 下输入

标签: ios objective-c handoff nsuseractivity


【解决方案1】:

好的,

我已向 Apple 提交了一份关于此的 TSI,看来这不是错误,而是设计使然。

您可以在 application:continueUserActivity:restorationHandler 委托中恢复您的活动,在我的情况下,它没有被调用。

好吧,我的错误是您需要在 application:didFinishLaunchingWithOptions: 方法中返回 YES,否则如果您返回 NO,则不会调用 application:continueUserActivity:restorationHandler

我们已经在我们的应用中实现了 FB,所以我们在哪里返回 [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions] 这将返回 NO。

我已将application:didFinishLaunchingWithOptions: 函数中的代码更改为此

if (launchOptions && [[launchOptions allKeys] containsObject:UIApplicationLaunchOptionsUserActivityDictionaryKey]) {
        return YES;
    }
else {
        return [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions];
}

这样application:continueUserActivity:restorationHandler委托就被成功调用,活动可以成功恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2015-11-07
    相关资源
    最近更新 更多