Запустить приложение-хост из приложения-наблюдателя
Я знаю, что расширение openParentApplication
api в расширении набора часов может открыть хост-приложение в фоновом режиме, но не на переднем плане.
Я также попытался использовать openUrl()
api NSExtensionContext
, как показано ниже:
NSExtensionContext *ctx = [[NSExtensionContext alloc] init];
NSURL *url = [NSURL URLWithString:@"myScheme://today"];
[ctx openURL:url completionHandler:^(BOOL success) {
NSLog(@"fun=%s after completion. success=%d", __func__, success);
}];
[ctx completeRequestReturningItems:ctx.inputItems completionHandler:nil];
Здесь также не запускается приложение-хост. Я что-то упускаю? или невозможно
запустить приложение-хост из расширения набора часов?
Ответы
Ответ 1
Если вам нужно открыть родительское приложение на переднем плане, используйте Handoff!
https://developer.apple.com/handoff/
Пример:
Где-то поделились обоими:
static let sharedUserActivityType = "com.yourcompany.yourapp.youraction"
static let sharedIdentifierKey = "identifier"
на часах:
updateUserActivity(sharedUserActivityType, userInfo: [sharedIdentifierKey : 123456], webpageURL: nil)
на вашем iPhone в App Delegate:
func application(application: UIApplication, willContinueUserActivityWithType userActivityType: String) -> Bool {
if (userActivityType == sharedUserActivityType) {
return true
}
return false
}
func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool {
if (userActivity.activityType == sharedUserActivityType) {
if let userInfo = userActivity.userInfo as? [String : AnyObject] {
if let identifier = userInfo[sharedIdentifierKey] as? Int {
//Do something
let alert = UIAlertView(title: "Handoff", message: "Handoff has been triggered for identifier \(identifier)" , delegate: nil, cancelButtonTitle: "Thanks for the info!")
alert.show()
return true
}
}
}
return false
}
И наконец (этот шаг важен!!!): В вашем Info.plist(s)
![enter image description here]()
Ответ 2
Начиная с Beta 3 iOS 8.2 в настоящее время невозможно открыть приложение iOS на переднем плане.
Как вы сказали, openParentApplication
может открыть приложение в фоновом режиме. К сожалению, API для открытия приложения на iPhone отсутствует.
Несколько сообщений на форумах Apple Dev сообщили, что это невозможно
https://devforums.apple.com/message/1076125#1076125
Правильно, уведомление все равно может объявить фоновое действие, которое будет обрабатывать приложение iPhone, поэтому в этом смысле оно может запустить приложение для iPhone. Но приложение iPhone не может быть представлено на переднем плане приложением WatchKit.
И другое сообщение
https://devforums.apple.com/message/1082620#1082620
На устройстве это приложение [Watch] не будет - вывести приложение iOS на передний план.
Ответ 3
Я надеюсь, что Apple предоставит API для запуска родительского приложения из приложения часов в будущей бета-версии, но на данный момент мне удалось добиться этого, выполнив следующие...
Вызвать openParentApplication:reply:
как обычно:
- (void)openPhoneApp {
[WKInterfaceController openParentApplication:[NSDictionary new] reply:nil];
}
Внедрите application:handleWatchKitExtensionRequest:reply:
в AppDelegate и запустите его с помощью специальной схемы URL:
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myappscheme://open"]];
}