Передача данных между двумя приложениями по схеме url в swift?

есть два тестовых приложения под названием Sender & Receiver

они общаются друг с другом по схеме Url. Я хотел бы отправить строку от отправителя к получателю, это возможно?

подробно о строку:

Я создаю текстовые поля в отправителе и получателе, я бы написал некоторую строку в текстовом поле отправителя. Когда я нажимаю кнопку, строка будет отображаться в текстовом поле Receiver.

кажется, что я должен реализовать NSNotificationCenter.defaultCenter().postNotificationName в моем приемнике приложений

вот мой код приемника приложения:

В Appdelegate

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

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

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

теперь я могу показать только информацию об url такой

image2

надеюсь получить некоторые предложения!

2 ответов


Да, вы можете использовать строку запроса.

URL-адрес.запрос содержит строку запроса. Например, в URL iOSTest: / / www.пример.com / screen1?textSent="Hello World" строка запроса textSent="Привет Мир".

обычно мы используем URLSchemes для deeplinking тоже, поэтому URLScheme указывает, какое приложение открыть, а путь в url указывает, какой экран открыть, и строка запроса имеет дополнительные параметры, которые мы хотим отправить в приложение.

URL-адрес.запрос является строкой, поэтому вам придется разобрать ее, чтобы получить нужное вам значение: Например, в URL iOSTest: / / www.пример.com / screen1?key1=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. например: iOSTest://?textSent="Hello World"


конечно можно. Вы просто составляете URL-адрес запуска приложения и передаете такие параметры, как

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

а затем проанализируйте его в UIApplicationDelegate