ios Handoff отсутствует NSUserActivity в launchOptions?

Я реализовал Handoff в нашем приложении, и он отлично работает для передачи обслуживания веб-приложения и наоборот, когда приложение работает на переднем плане или в фоновом режиме.

Однако если приложение не запущено, то, если пользователь запускает приложение из Интернета для передачи обслуживания приложения, в словаре launchOptions я получаю UIApplicationLaunchOptionsUserActivityDictionaryKey, но ссылка на активность отсутствует.

Смотрите скриншот:

Как видите, я получаю только удостоверение личности для NSUserActivity, Это ошибка в iOS 9?

Есть ли способ получить ссылку на действие, используя идентификатор?

Изменить, вот код, хотя я не думаю, что это актуально

- (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;
}

1 ответ

Решение

В порядке,

Я отправил TSI об этом в Apple, и кажется, что это не ошибка, а дизайн.

Вы можете возобновить свою деятельность в application:continueUserActivity:restorationHandler делегат, которого в моем случае не называли.

Ну, моя ошибка заключалась в том, что вам нужно вернуть ДА в application:didFinishLaunchingWithOptions: метод, иначе, если вы вернете НЕТ, application:continueUserActivity:restorationHandler не называется.

Мы реализовали FB в нашем приложении, поэтому мы вернулись [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions] который возвратил бы НЕТ.

Я изменил наш код в application:didFinishLaunchingWithOptions: функция к этому

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

Таким образом, application:continueUserActivity:restorationHandler Делегат успешно вызывается, и деятельность может быть успешно возобновлена.

Другие вопросы по тегам