2016-07-12 4 views
3

Ich habe versucht, [self.extensionContext openURL:completion], aber meine App abgestürzt. Ich habe gehört, einige Erweiterungen können diese Methode nicht verwenden, können iMessage-Erweiterungen?Kann Imitation Erweiterung Host-App öffnen?

Übrigens kann Host-App seine iMessage-Erweiterung aktivieren?

+0

prüfen diese Antwort (https://stackoverflow.com/a/44718613/2150318) –

Antwort

0

This is apparently not working in Seed 2 but should be fixed in Seed 3.

https://forums.developer.apple.com/message/153441#153441

+0

Es ist nicht, dass es nicht funktioniert. Sie sollen nicht auf diese Weise funktionieren. Dies sollte nicht die akzeptierte Antwort sein. – MattWright

+1

'Ich habe gerade einen Test gemacht. Jetzt können Sie Host-App von iMessage-Erweiterung auf Beta 4 öffnen? – Maize

5

Freigabeerweiterungen und Aktionserweiterungen sind nicht als App-Startprogramme gedacht.

App Extension Programming Guide

Es gibt keine direkte Kommunikation zwischen einer Anwendung und ihre Verlängerung enthält, app; In der Regel wird die enthaltene App nicht ausgeführt, während eine enthaltene Erweiterung ausgeführt wird. Eine App-Erweiterung, die die App enthält, und die Host-App kommunizieren überhaupt nicht.

Die Erweiterung zeigt eine Benutzeroberfläche an, führt einige Arbeit aus und gibt, falls für den Zweck der Erweiterung geeignet, Daten an den Host zurück.

Die Interaktion zwischen einer App-Erweiterung und der zugehörigen App ist begrenzt. Ein Today-Widget (und kein anderer App-Erweiterungstyp) kann das System bitten, die zugehörige App zu öffnen, indem die Methode openURL:completionHandler: der Klasse NSExtensionContext aufgerufen wird. "

enter image description here

Eine Arbeit um von dieser abgeleiteten SO question.

Arbeitslösung (getestet auf iOS 9.2) für Keyboard Extension.

Diese Kategorie fügt spezielle Methode für den Zugriff auf verstecktsharedApplication Objekt und dann rufen Sie openURL: darauf. (Natürlich müssen Sie dann openURL: Methode mit Ihrem App-Schema verwenden.)

// Valentin Shergin 

extension UIInputViewController { 

func openURL(url: NSURL) -> Bool { 
    do { 
     let application = try self.sharedApplication() 
     return application.performSelector("openURL:", withObject: url) != nil 
    } 
    catch { 
     return false 
    } 
} 

func sharedApplication() throws -> UIApplication { 
    var responder: UIResponder? = self 
    while responder != nil { 
     if let application = responder as? UIApplication { 
      return application 
     } 

     responder = responder?.nextResponder() 
    } 

    throw NSError(domain: "UIInputViewController+sharedApplication.swift", code: 1, userInfo: nil) 
} 

} 
+0

Dank [Meine Anwendung von meiner Tastatur Erweiterung in swift 3.0 Öffnen], also kann ich nicht verwenden ' openURL: Vervollständigung in meiner Nachrichtenerweiterung? – Maize

+0

Nicht die Vervollständigung, aber Sie können diese sehr kurze Erweiterung verwenden, um auf das versteckte 'sharedApplication'-Objekt zuzugreifen und dann' openURL' darauf aufzurufen. Ich habe gerade meine Antwort aktualisiert. – tymac

+0

ok, danke, ich habe neue Dinge gelernt – Maize

-2
[self.extensionContext openURL:YOUR_NSURL completionHandler:nil]; 

wäre es schön, wenn Sie in Deep-Links App

spezifischen Bildschirm öffnen passieren kann
0

self.extensionContext?.open(url, completionHandler: nil) nicht in meiner iMessage Erweiterung funktioniert.

tymac Antwort ist richtig, aber openURL in Swift zu öffnen verschoben wurde 3.

ich eine einfachere Lösung in diesem Thread gefunden: openURL not work in Action Extension

extension UIViewController { 

    func openURL(url: URL) { 
    var responder = self as UIResponder? 

    while (responder != nil){ 
     if responder?.responds(to: Selector("openURL:")) == true{ 
     responder?.perform(Selector("openURL:"), with: url) 
     } 
     responder = responder!.next 
    } 
    } 

} 
+0

Dies funktioniert nicht ... –

-1

Dies funktioniert gut für mich:

NSString *customURL = @"myHostAppName://"; 

    if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:customURL]]) { 
     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; 
    } else { 

     UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"URL error" message:[NSString stringWithFormat:@"No custom URL defined for %@", customURL] preferredStyle:UIAlertControllerStyleAlert]; 

     UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
     [alertController addAction:ok]; 

     [self presentViewController:alertController animated:YES completion:nil]; 
    } 

Denken Sie daran, die Host-App erneut zu installieren.

Nehmen Sie in Betracht How to open our app from iMessage

Verwandte Themen