论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
软件与程序人生
›
移动端开发
›
IOS
›
IOS如何判断一个应用是否已安装以及获取已安装列表 ...
IOS如何判断一个应用是否已安装以及获取已安装列表
渣渣兔
论坛元老
|
2025-3-8 20:39:17
|
显示全部楼层
|
阅读模式
楼主
主题
1582
|
帖子
1582
|
积分
4746
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
一、如何判断一个应用是否已安装
网上给出最多的方案为根据应用的协议判断是否可以启动应用从而判断某应用是否已安装
1、示例代码
如下代码可通过协议判断某应用是否已安装,传入对应的协议即可
///检测应用是否被安装
func isAppInstalled(scheme: String) -> Bool {
if let url = URL(string: scheme) {
return UIApplication.shared.canOpenURL(url)
}
return false
}
复制代码
如下代码为点击按钮判断是否安装了微信、淘宝、微博的代码:
Button("判断是否安装了微信"){
if isAppInstalled(scheme: "weixin://") {
log = "是否安装了微信:是"
} else {
log = "是否安装了微信:否"
}
}.padding()
.background(.blue)
.foregroundColor(.white)
.cornerRadius(40)
Button("判断是否安装了淘宝"){
if isAppInstalled(scheme: "taobao://") {
log = "是否安装了淘宝:是"
} else {
log = "是否安装了淘宝:否"
}
}.padding()
.background(.blue)
.foregroundColor(.white)
.cornerRadius(40)
Button("判断是否安装了微博"){
if isAppInstalled(scheme: "sinaweibo://") {
log = "是否安装了微博:是"
} else {
log = "是否安装了微博:否"
}
}.padding()
.background(.blue)
.foregroundColor(.white)
.cornerRadius(40)
复制代码
2、利用前提
利用以上方法有个前提是必须要现在项目的清单文件里配置跳转协议url白名单才行:如下图,如果要想查微信、淘宝、微博是否安装,必须增加白名单,否则直接调用isAppInstalled(scheme: "weixin://")一定会返回false,即不生效。
如图下图,是打到安装包里的信息,会在安装包里的info.plist清单文件中
3、执行结果
4、此方法是否靠谱
可以看到这个方法本质是通过目标应用所特有的协议去判断目标应用是否已安装,并非直接通过报名判断。这就要确保协议的唯一性,而如果有多个应用界说了相同的协议,则此方法大概会不正确。
二、如何界说一个自己的协议以及如何知道某个目标应用的协议
1、自己的应用界说协议
在项目配置文件中加一个URL Scheme即可
最终在info.plist中表现如下:
2、如何获取某个应用界说的协议,抖音为例
通过上一步界说方法,可以看到界说协议是在项目清单文件中,类似Android的manifest中,故拿到目标应用的安装包就知道了它所界说的协议,以抖音为例:我们需要借助爱思助手拿到抖音安装包
通过借助爱思助手下载到抖音的ipa安装包,并解压得到如下抖音安装包的清单文件:
通过搜刮关键字【CFBundleURLSchemes】可以看到抖音实在自身注册了很多协议
3、用抖音的协议做测试判断是否安装
我们选取一个和抖音关系不那么大的协议协议【snssdk1128luckydogsocial】试试看:
最终发现,当抖音安装时,返回是,当卸载抖音时,发挥否。试了其他抖音注册的协议发现也都是可行的,但不确保这些协议是否仅抖音注册,其他应用是否也同样注册。
4、抖音对哪些协议加了白名单?抖音是否有通过这些协议判断某应用是否安装呢?
如下图,通过搜刮关键字【LSApplicationQueriesSchemes】可以看到抖音给120个协议加了白名单,即抖音大概会通过这120个协议吊起某些应用,但是否用这些协议来判断某应用是否已安装就不得为之,由于差别的应用是可以注册相同的协议的。
如果一个应用有其特点的协议,比如微信的协议有【weixin】,支付宝的协议有【alipay】,这些比力有特性的协议判断应用是否安装题目应该不大
但如果像【snssdk141】这类看起来是sdk内里的协议,用这种协议肯定是没法去判断某个应用是否安装的
三、能否获取手机上的已安装列表
1、能否用循环的UIApplication.shared.canOpenURL(url)方法来获取手机上的大概已安装列表?
如果用这个方法实现需要做事情:
拿到市面上top1000的安装包,并且需要从其安装包中提取出这个包所特有的协议
在自己APP清单文件中将这1000个协议加白名单
循环调用IApplication.shared.canOpenURL(url)方法判断这些应用是否已安装
附件:
demo源码:https://github.com/kh896424665/push/tree/master/PushDemo
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
渣渣兔
论坛元老
这个人很懒什么都没写!
楼主热帖
事务的ACID特性
SqlServer2012升级到SqlServer2016
DCM: 中间件家族迎来新成员
深度干货!一篇Paper带您读懂HTAP | St ...
iOS事件传递链与响应链
(内附源码)Node.js小试——使用Node ...
arthas使用介绍
.NET for Apache Spark 入门演练
go-zero单体服务使用泛型简化注册Handl ...
SaaS软件工程师成长路径
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
数据仓库与分析
Oracle
Postrge-SQL技术社区
Nosql
容器及微服务
开源技术
鸿蒙
虚拟化与私有云
Mysql
快速回复
返回顶部
返回列表