Передача данных между двумя приложениями по схеме url в swift?
есть два тестовых приложения под названием Sender & Receiver
они общаются друг с другом по схеме Url. Я хотел бы отправить строку от отправителя к получателю, это возможно?
подробно о строку:
Я создаю текстовые поля в отправителе и получателе, я бы написал некоторую строку в текстовом поле отправителя. Когда я нажимаю кнопку, строка будет отображаться в текстовом поле Receiver.
вот мой код приемника приложения:
В 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 такой
надеюсь получить некоторые предложения!
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¶m2=Valuew
а затем проанализируйте его в UIApplicationDelegate