最近在使用一些 App 的时候发现他们可以在不打开 App Store 的时候直接在页面底部弹出一个 App Store 的 Banner,并且可以直接操作浮层上的获取按钮来直接安装。
研究了一下,主要用到的是一个名为 SKOverlay[1] 的类,直接配置一个 app ID,即可展示浮层。
如何找到 app ID?
-
打开 App Store,搜索你想查找的 app
-
点击这个 app,进入详情页
-
点击分享按钮,唤起系统分享面板
-
点击复制链接
比如我复制出来的链接地址为 apps.apple.com/cn/app/%E6%… 1142110895 就是这个 app 在 App Store 上的 ID。**
用上述的办法找到抖音在 App Store 上的 id 为 1142110895,就可以很轻易的创建 SKOverlay。
let config = SKOverlay.AppConfiguration(appIdentifier: "1142110895", position: .bottom)
let overlay = SKOverlay(configuration: config)
至于如何唤起,在 swiftUI 里这样使用
import SwiftUI
import StoreKit
struct ContentView: View {
@State var appID: String = "1142110895"
@State var showOverlay = false
var body: some View {
VStack {
HStack {
TextField("输入 App ID", text: $appID)
.background(Color.gray)
Button("Show Overlay") {
showOverlay = false
showOverlay = true
}
.appStoreOverlay(isPresented: $showOverlay) {
SKOverlay.AppConfiguration(appIdentifier: appID, position: .bottom)
}
}
}
.padding()
}
}
上边这段代码会创建一个输入框,可以输入对应 app 的 ID,输入框后有个 Show Overlay 按钮,点击按钮后,在页面底部会弹出对应的 app。
同样的功能,UIKit 中这样使用:
func showOverlay() {
guard let scene = self.view.window?.windowScene else {
return
}
let config = SKOverlay.AppConfiguration(appIdentifier: "1142110895", position: .bottom)
let overlay = SKOverlay(configuration: config)
config.userDismissible = true
overlay.delegate = self
overlay.present(in: scene)
}
另外需要注意
-
SKOverlay 支持 iOS 14+,需要做好 iOS 14 以下的兼容
-
SKOverlay 目前无法自定义 UI,并且上边的按钮点击、下载进度等也都拿不到回调
-
如果你要展示的 App 在当前用户 App Store 上不可见(比如要展示一个美区的 app,但当前用户登录的是国区的账号),就会报错,可以用代理来监控这种情况
参考资料
[1]
SKOverlay 官方文档: developer.apple.com/documentati…