iOS swift 通过Url打开自定义的app
2015-11-03 14:32
453 查看
在info.plist中代码模式下添加:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>aaa</string>
</array>
</dict>
</array>
aaa是自定义的协议
在AppDelegate.swift中,重写一个方法
//外界启动URL操作
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
print("通过外界启动")
//获取当前ViewController并添加文字展示url
let vc = self.window?.rootViewController
let label = UILabel(frame: CGRect(x: 50, y: 100, width: 400, height: 100))
label.text = "\(url)"
vc?.view.addSubview(label)
return true
}
在js中:
<a href="aaa://learn.swift?name=zhangsan&age=13">打开aaa应用</a>
就可以通过浏览器打开自己的应用了
在其他app中,通过以下代码打开自己的应用
UIApplication.sharedApplication().openURL(NSURL(string: "aaa://")!)
当然后面也可以传递参数
openUrl这个方法返回类型是bool,有时候会出现即使成功打开应用也返回false的情况。
可以先调用UIApplication.sharedApplication().canOpenUrl()来得到正确的值。
即使是这样,也有可能返回false并在控制台输出一个错误。
解决方法:把需要打开的URL加入自己应用的info.plist
一定要用真机测试!!!
当然也可以通过URL的方式打电话,发短信,发邮件等等,可以参考这篇文章:点击打开链接
最后要说一下参数的解析方式,在handleOpenURL方法中传递过来的URL带有参数我们如何解析呢?
例如 url = aaa://learn.swift?name=zhangsan&age=13"
类型是NSURL,可以通过url.query得到参数字符串,在用字符串的根据符号‘&’分割的方法就可以得到参数key=value的字符串数组,再根据‘=’分割久可以分别得到key和value了。
let myArray = url.query?.componentsSeparatedByString("&")
var dict:NSMutableDictionary = NSMutableDictionary()
for i in myArray!{
let myArray2 = i.componentsSeparatedByString("=")
dict.setValue(myArray2[1], forKey: myArray2[0])
}
print(dict)
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>aaa</string>
</array>
</dict>
</array>
aaa是自定义的协议
在AppDelegate.swift中,重写一个方法
//外界启动URL操作
func application(application: UIApplication, handleOpenURL url: NSURL) -> Bool {
print("通过外界启动")
//获取当前ViewController并添加文字展示url
let vc = self.window?.rootViewController
let label = UILabel(frame: CGRect(x: 50, y: 100, width: 400, height: 100))
label.text = "\(url)"
vc?.view.addSubview(label)
return true
}
在js中:
<a href="aaa://learn.swift?name=zhangsan&age=13">打开aaa应用</a>
就可以通过浏览器打开自己的应用了
在其他app中,通过以下代码打开自己的应用
UIApplication.sharedApplication().openURL(NSURL(string: "aaa://")!)
当然后面也可以传递参数
openUrl这个方法返回类型是bool,有时候会出现即使成功打开应用也返回false的情况。
可以先调用UIApplication.sharedApplication().canOpenUrl()来得到正确的值。
即使是这样,也有可能返回false并在控制台输出一个错误。
解决方法:把需要打开的URL加入自己应用的info.plist
info.plist加入 <key>LSApplicationQueriesSchemes</key> <array> <string>urlscheme</string> <string>urlscheme2</string> <string>urlscheme3</string> <string>urlscheme4</string> </array>
一定要用真机测试!!!
当然也可以通过URL的方式打电话,发短信,发邮件等等,可以参考这篇文章:点击打开链接
最后要说一下参数的解析方式,在handleOpenURL方法中传递过来的URL带有参数我们如何解析呢?
例如 url = aaa://learn.swift?name=zhangsan&age=13"
类型是NSURL,可以通过url.query得到参数字符串,在用字符串的根据符号‘&’分割的方法就可以得到参数key=value的字符串数组,再根据‘=’分割久可以分别得到key和value了。
let myArray = url.query?.componentsSeparatedByString("&")
var dict:NSMutableDictionary = NSMutableDictionary()
for i in myArray!{
let myArray2 = i.componentsSeparatedByString("=")
dict.setValue(myArray2[1], forKey: myArray2[0])
}
print(dict)
相关文章推荐
- 详解Swift编程中的常量和变量
- Swift 入门基础(结构体/类)
- OC + Swift 混编(二)
- OC + Swift 混编 (一)
- ios swift UIwebView
- swift控制语句,for,while,repeat-while,if,switch
- Swift高级运算符(Advanced Operators)
- swift 快速奔跑的兔几 本节的内容是:animations
- Swift 学习笔记 - 闭包
- ios中的各种控件(Swift开发实战权威指南笔记)
- swift 快速奔跑的兔几 本节的内容是:重力和snap效果
- Swift 学习笔记 - 类(1) 定义一个类
- 源码推荐(11.03):定制的Alertview 不用写代理不用实例化,Swift版本 随着键盘升起淡入一个view
- swift学习笔记_iOS开发(一)
- swift 初始化方法
- swift学习Day01
- swift 快速奔跑的兔几 本节的内容是:UIDynamic:UI和重力
- Swift语言学习---------初级
- Instance Methods are Curried Functions in Swift
- Swift再浪一波,快来快来