Подтвердить что ты не робот

Сегодня App Extension Widget Нажмите, чтобы открыть Содержит приложение

Я применил виджет "Сегодня" для своего приложения + "Котировки", который отображает котировку дня в центре уведомлений с помощью этих Документы Apple. То, что я хотел бы сделать, заключается в том, чтобы открыть Containing App, в этом случае + Quotes, когда пользователь вбрасывает виджет + Quotes в свой вид уведомлений Today, не совсем уверен, что назвать это, поскольку Calendar будет, если вы нажмете его в Сегодня вид. Я пробовал накладывать кнопку над ярлыком, который вызывал бы -(void)openURL:(NSURL *)URL completionHandler:(void (^)(BOOL success))completionHandler после того, как он будет прослушиваться, откройте схему пользовательских URL, которую я объявил, чтобы открыть приложение Containing. Проблема заключается в том, что он не открывает Containing App.

+Quotes Today App Extension Widget

-(IBAction)myButton:(id)sender {
    NSURL *customURL = [NSURL URLWithString:@"PositiveQuotes://"];
    [self openURL:customURL completionHandler:nil];
}
4b9b3361

Ответ 1

EDIT: Хорошо, здесь немного коррекция. Я получил его работу с размещением кнопки над ярлыком, как это было предложено выше, и следующим кодом:

- (IBAction) goToApp: (id)sender { 
    NSURL *url = [NSURL URLWithString:@"floblog://"];
    [self.extensionContext openURL:url completionHandler:nil]; 
  }

Я связал его с событием "Touch Up Inside". Однако это также приводит к запуску приложения, когда пользователь просматривает представление "Сегодня".

=======================================

Я столкнулся с той же проблемой. Однако кажется, что на данный момент решения нет, поскольку примечания о выпуске для первой бета-версии iOS 8 упоминаются:

Известные проблемы: openURL не работает с расширением.

Итак, я думаю, нам придется ждать до бета 2.

Ответ 2

версия Swift 2, согласно Apple Doc

extensionContext?.openURL(NSURL(string: "foo://")!, completionHandler: nil)

версия Swift 3

extensionContext?.open(URL(string: "foo://")! , completionHandler: nil)

И не забудьте добавить Пользовательские схемы URL в Info.plist

введите описание изображения здесь

Ответ 3

Ответ от @sunseeker хороший, но он "скрыт" в комментариях. И поскольку принятый ответ говорит, что это невозможно, это может ввести в заблуждение посетителей.

этот код работает:

- (IBAction)launchHostingApp:(id)sender
{
  NSURL *pjURL = [NSURL URLWithString:@"hostingapp://home"];
  [self.extensionContext openURL:pjURL completionHandler:nil];
}

Я использую Xcode 6.0 (6A215l) с Yosemite Beta 1.

И как Apple говорит в "Сценарии использования сообщества" :

Расширение напрямую не сообщает об открытии приложения, содержащего его; вместо этого он использует метод openURL: completeHandler: NSExtensionContext, чтобы сообщить системе открыть свое содержащее приложение. когда расширение использует этот метод для открытия URL-адреса, система проверяет запрос перед его выполнением.

Ответ 4

Другой способ сделать это без добавления скрытой кнопки - добавить UITapGestureRecognizer в UILabel (обязательно установите для параметра userInteractionEnabled значение true на метке). Проверьте состояние распознавателя в обработчике, чтобы убедиться, что вы достигли UIGestureReconizerStateEnded (а не отменены или сработали), а затем запустите свой код openUrl.

Ответ 5

На всякий случай, здесь версия для Swift 3 с версией обработки ошибок:

let myAppUrl = URL(string: "main-screen:")!
extensionContext?.open(myAppUrl, completionHandler: { (success) in
    if (!success) {
        print("error: failed to open app from Today Extension")
    }
})

Чтобы заставить его работать, вам нужно открыть Application info.plist(открыть как исходный код) и в самом верху, после этого

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

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