Roy的个人站

樵夫的小站

马上订阅 Roy的个人站 RSS 更新: https://geofftools.cn/blog/atom.xml

实现可被链接调用的IOS应用

2020年4月10日 16:55

我经常通过链接调用本地应用,比如支付宝的扫码支付,向特定用户发送短信。甚至一些隐藏的功能也以链接作为入口,例如Jellow现在的综合搜索。IOS上有两种实现调用的方法,分别是URL Scheme和Universal Links。本文实现了一个简单的Swift项目,实现并介绍这两种功能。

本文需要基本的Swift基础,接触过SwiftUI,大概就是官方例子大致看过的水平即可。

URL Scheme

简介

这种链接是scheme://data的形式,IOS会根据本地安装的应用搜索scheme,找到后询问你是否要通过相关应用打开该链接。很常用的一个链接是微信的扫码weixin://scanqrcode,通过这个链接直接打开微信的扫码。当然,首先需要本地安装了微信。它让类似捷径等一些自动化软件的功能大大增加。

有部分的Scheme是被保留的,可以通过这些保留的Scheme调用一些系统功能,例如短信、FaceTime,这里介绍了有哪些以及具体怎么使用这些内容,有兴趣可以尝试一下。

如果想要了解应用对应的scheme是什么,解压缩ipa,然后在Info.plist文件的CFBundleURLSchemes字段就是设置的scheme。但要了解scanqrcode之类的具体应用,就麻烦的多,网上如果没有现成的内容就需要反编译去找了。

展示收到的内容

我试了试用SwiftUI来写这个小东西,是个很简单的过程。

新建一个项目以后,在ContentView.swift里面加上基本的显示UI即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import SwiftUI

class LinkData: ObservableObject {
@Published var links :[Link]
init() {
self.links = [Link]()
}
func append(link: Link) {
self.links.append(link)
}
}

struct Link {
var time: String
var data: String
var fromApp: String
var linkType: LinkType

enum LinkType: String {
case urlScheme = "URL Scheme"
case universal = "Universal link"
}
}

struct NavigateList: View {
@ObservedObject var linkData: LinkData

var body: some View {
VStack {
NavigationView {
List{
ForEach(linkData.links, id: \.time) { link in
Row(link: link)
}
}
.navigationBarTitle(...

剩余内容已隐藏

查看完整文章以阅读更多