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
Делегат успешно вызывается, и деятельность может быть успешно возобновлена.