2016-04-18 5 views
3

Sender &という2つのテストアプリがあります。Receiver2つのApps間のデータを迅速にURLスキームで渡しますか?

これらは、URLスキームで互いに通信します。送信者から受信者に文字列を送信したいのですが可能ですか?文字列について

詳細:私の両方がSenderとReceiverにTextFieldを作成

、私は送信者のテキストフィールドにいくつかの文字列をテキストでしょう。ボタンをクリックすると、文字列がReceiver Textfieldに表示されます。ここで

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

は私のアプリレシーバーコードです:

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

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

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 
    } 
} 

今のViewControllerでAppdelegateで、私はURLのみlike thisについての情報を表示することができます

image2

いくつかの提案を得ることを望む!

答えて

4

でそれを解析します。

url.queryにはクエリ文字列が含まれています。たとえば、 iOSTest://www.example.com/screen1?textSent = "Hello World"の場合、クエリ文字列はtextSent = "Hello World"です。

通常、私たちは逆参照にもURLSchemesを使用しているため、URLSchemeは開くアプリケーションとURLのパスを指定して、開く画面とクエリ文字列にアプリケーションに送信する追加パラメータを指定します。 URL iOSTestで、たとえば :

url.queryしたがって、あなたが必要な値を取得するためにそれを解析する必要がありますが、文字列のですか?//www.example.com/screen1キー1 = VALUE1 & key2 = value2、クエリ文字列はkey1 = value1 & key2 = value2です。

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はクエリ文字列内のすべてのキーと値のペアが含まれます:私はそれを解析していますが、あなたのケースのためにそれをテストすることを確認するためのコードを書いています。 ご希望の方:]

ディープリンクしたくない場合は、直接schemeにqueryStringを追加することができます。例:iOSTest://?textSent = "Hello World"

+0

完璧な答え!ので、スキームの後にクエリを追加するクール。 – HungCLo

+0

良い答え。文字列以外のデータを渡す場合は、base64に関する情報を追加する必要があります。 –

+0

偉大な答え、よく説明され、明確な例があります。 – Josh

0

もちろん可能です。あなたは自分のアプリの起動URLを構成し、この

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

のようなパラメータを渡した後、はい、あなたは、クエリ文字列を使用することができますUIApplicationDelegate

関連する問題