2016-04-18 17 views
3

Es gibt zwei Test Apps genannt Sender & EmpfängerDaten zwischen zwei Apps von URL-Schema in Swift übergeben?

sie miteinander durch URL-Schema kommunizieren. Ich möchte einen String vom Sender zum Empfänger senden, ist das möglich?

Details über den String:

ich beide erstellen Textfelder in Sender und Empfänger, würde ich einige String auf Sender Textfeld Text. Wenn ich auf die Schaltfläche klicke, wird die Zeichenfolge im Empfängertextfeld angezeigt.

It seems that I have to implement NSNotificationCenter.defaultCenter().postNotificationName in my Apps Receiver

Hier ist meine App Receiver Code:

In AppDelegate

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { 

    calledBy = sourceApplication 
    fullUrl = url.absoluteString 
    scheme = url.scheme 
    query = url.query 
} 

In Viewcontroller

override func viewDidLoad() { 
    super.viewDidLoad() 

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.displayLaunchDetails), name: UIApplicationDidBecomeActiveNotification, object: nil) 
    // Do any additional setup after loading the view, typically from a nib. 
} 

func displayLaunchDetails() { 
    let receiveAppdelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    if receiveAppdelegate.calledBy != nil { 
     self.calledByText.text = receiveAppdelegate.calledBy 
    } 
    if receiveAppdelegate.fullUrl != nil { 
     self.fullUrlText.text = receiveAppdelegate.fullUrl 
    } 
    if receiveAppdelegate.scheme != nil { 
     self.schemeText.text = receiveAppdelegate.scheme 
    } 
    if receiveAppdelegate.query != nil { 
     self.queryText.text = receiveAppdelegate.query 
    } 
} 

Jetzt kann ich zeigen, nur die Informationen über die URL like this

image2

Hoffnung einen Vorschlag zu erhalten!

Antwort

4

Ja, Sie Query-String verwenden können.

url.query enthält die Abfragezeichenfolge. Zum Beispiel in der URL iOSTest: //www.example.com/screen1 textSent = "Hallo Welt", der Query-String ist textSent = "Hallo Welt"?.

Normalerweise verwenden wir URLSchemes auch zum Deeplinking, daher gibt das URLSchema an, welche App geöffnet werden soll und der Pfad in der URL gibt an, welcher Bildschirm geöffnet werden soll und der Abfrage-String zusätzliche Parameter hat, die wir an die App senden möchten.

url.query ist eine Zeichenfolge, deshalb werden Sie es analysieren müssen, um den Wert zu erhalten, benötigen Sie: Zum Beispiel in der URL iOSTest: //www.example.com/screen1 key1 = value1 & key2 = value2, die Abfragezeichenfolge ist key1 = value1 & key2 = value2. Ich schreibe Code, um es zu analysieren, aber stellen Sie sicher, dass Sie es für Ihren Fall testen:

let params = NSMutableDictionary() 
    let kvPairs : [String] = (url.query?.componentsSeparatedByString("&"))! 
    for param in kvPairs{ 
     let keyValuePair : Array = param.componentsSeparatedByString("=") 
     if keyValuePair.count == 2{ 
      params.setObject(keyValuePair.last!, forKey: keyValuePair.first!) 
     } 
    } 

params alle Schlüsselwertepaare in Query-String enthalten. Hoffe, es hilft:]

Falls Sie nicht wollen, tief Vernetzung zu tun, können Sie direkt den querystring Schema anhängen. zB: iOSTest: //? textSent = "Hallo Welt"

+0

Perfekte Antwort !! So cool, eine Abfrage nach dem Schema hinzuzufügen. – HungCLo

+0

Schöne Antwort.Sie sollten Informationen zu base64 hinzufügen, wenn Sie andere Daten als Strings übergeben möchten. –

+0

Große Antwort, gut erklärt und mit einem klaren Beispiel. – Josh

0

Natürlich können Sie. Sie komponieren nur Ihre App-Start-URL und übergeben Sie die Parameter wie dieses

iOSTest://?param1=Value1&param2=Valuew 

und analysieren sie dann in UIApplicationDelegate