兩種檢測方式
1.bundle ID —— 包名好乐,是每個應(yīng)用的唯一識別碼(換言之,這個值是一定會有的)
2.URL Scheme —— 供APP 之間跳轉(zhuǎn)(打開應(yīng)用)使用绰沥,需要在下面的配置中去手動添加(換言之篱蝇,如果我沒有配置他,他也沒有默認(rèn)值徽曲,實際上我是無法通過外部應(yīng)用打開的)
Bundle ID
缺點:方法一消耗一定的性能(手機安裝APP比較多的話)零截,APP 審核必被拒
優(yōu)點:跳過了iOS9.0 對canOpenURL這個API使用限制
#include <objc/runtime.h>
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSArray *allApplications = [workspace performSelector:@selector(allApplications)];//這樣就能獲取到手機中安裝的所有App
NSLog(@"設(shè)備上安裝的所有app:%@",allApplications); NSInteger zlConnt = 0;
for (NSString *appStr in allApplications) {
NSString *app = [NSString stringWithFormat:@"%@",appStr];//轉(zhuǎn)換成字符串
NSRange range = [app rangeOfString:@"你要查詢App的bundle ID"];//是否包含這個bundle ID
if (range.length > 1) {
zlConnt ++;
}
}
if (zlConnt >= 1) {
NSLog(@"已安裝");
}
URL Scheme
1.必須要提前知道打開APP的列表,也就是白名單秃臣,并配置到工程的 info.plist中去瞻润。
2.無法動態(tài)更新列表(每次新增都需要去更改這個列表)
配置的方法:
1.用 source code 的方式打開工程的 info.plist, 找到(如果沒有就添加)LSApplicationQueriesSchemes ,加入對應(yīng)的 URL Scheme
<key>LSApplicationQueriesSchemes</key>
<array>
<string>wechat</string>
<string>weixin</string>
<string>twitter</string>
</array>
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"IOSDevApp://"]]){
//說明此設(shè)備有安裝app
}else{
//說明此設(shè)備沒有安裝app
}
2.假設(shè)我們要檢測微信是否已安裝甜刻,那么通過下面這段代碼(swift為例). 務(wù)必在 string的末尾加上
func detectInstalled(URLString: String?) -> URL? {
if let URLString = URLString, let exsistURL = URL(string: URLString), UIApplication.shared.canOpenURL(exsistURL) {
return exsistURL
} else {
return nil
}
}
detectInstalled(URLString: "weixin://")