Связь с/открытие Содержит приложение из расширения Share

Вот что я пробовал, что НЕ работал:

  • Использование openURL для попытки открыть содержащее приложение

Вот что я думал о том, что это не сработает:

  • Использование локальных уведомлений для предоставления ссылки на содержащее приложение (создание локального уведомления из расширения)

Вот варианты, которые я рассматриваю:

  • Использование UIDocumentInteractionController и настраиваемого типа расширения файла для предоставления ссылки на мое приложение (и только мое приложение)
  • Запуск "поддельного" сеанса NSURL для получения следующих функций: в iOS, если ваше расширение не работает при завершении фоновой задачи, система запускает ваше содержащее приложение в фоновом режиме и вызывает приложение: handleEventsForBackgroundURLSession: completeHandler: app delegate метод.

UIDocumentInteractionController подтвержден для работы в Xcode 6.5, но поток является довольно выигрышным. Нужно также работать с NSURL, но это тоже немного подозрительно. Кто-нибудь имеет какие-либо другие идеи о том, чтобы открыть мое приложение для добавления из расширения общего доступа или идею связаться с ним из расширения общего доступа?

Ответ 1

Я подтвердил, что способ NSURLSession (вторая пуля под "рассмотрением" выше) действительно работает. Я все еще разрабатываю некоторые перегибы, но вот основные сведения. Используя этот метод, вы действительно можете открыть свое приложение из расширения общего доступа.

Этот метод требует 3 основных этапа:

  • Сделать фоновый NSURLSession в расширении Share.
  • Запустите задачу загрузки.
  • Вызов вызова (0).

Убедитесь, что вещь, которую вы загружаете, занимает достаточно много времени, так что расширение заканчивается перед завершением задачи загрузки.

NSString *address = @"https://googledrive.com/host/0B5zObXR9UzgmbFpob2J5eXpjNXc/file3m";
self.mySession = [self configureMySession];
NSURL *url = [NSURL URLWithString:address];
NSURLSessionTask *myTask = [self.mySession downloadTaskWithURL:url];
[myTask resume];
exit(0);

Затем в вашем классе UIApplicationDelegate, использующем приложение, выполните

application:handleEventsForBackgroundURLSession:completionHandler: 

метод. Этот метод вызывается, когда задача загрузки заканчивается после того, как ваше расширение было прервано. Затем в этом методе вы можете вызвать

[[UIApplication sharedApplication] openURL:url];

или выполните некоторые другие действия в вашем приложении.

Основная проблема с этим методом заключается в том, что существует задержка между временем завершения приложения и временем запуска приложения. Основное преимущество этого метода над методом UIDocumentInteractionController заключается в том, что дополнительное взаимодействие с пользователем не требуется. Более подробные сведения придут, когда я продолжу экспериментировать.