最近項目中涉及到了 建行龍支付的問題 于是特意研究了下判斷手機是否安裝過某個app
主要有這個方法
步驟一: 獲取iOS設(shè)備上所有已經(jīng)安裝的app
導(dǎo)入運行時頭文件
include <objc/runtime.h>
添加如下方法
+(BOOL)checkInstalledApp:(NSString)app_id
{
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
NSArray *allApplications = [workspace performSelector:@selector(allApplications)];//這樣就能獲取到手機中安裝的所有App
BOOL b=NO;
NSInteger zlConnt = 0;
for (NSString *appStr in allApplications) {
NSString *app = [NSString stringWithFormat:@"%@",appStr];//轉(zhuǎn)換成字符串
NSRange range = [app rangeOfString:app_id];
//是否包含這個bundle ID
if (range.length > 1) {
zlConnt ++;
}
}
if (zlConnt >= 1) {
NSLog(@"已安裝");
return YES;
}
return b;
}
//調(diào)用的時候傳入對應(yīng)的bundle_id 就好了
NSString* app_id=@"com.ccb.ccbDemo";//建設(shè)銀行的bundle_id也可以以其他的來實驗
//FetchDataHelper 是一個自定義的類
BOOL b= [FetchDataHelper checkInstalledApp:app_id];
if (b) {
//已安裝
DDLog(@"--安裝建行");
}else
{
NSLog(@"--3333沒安裝建行");
//建行支付
}
運行結(jié)果是準確的,本人親自試驗過.
ps(補充下) 蘋果貌似禁用了 LSApplicationWorkspace defaultWorkspace 等方法 這個方法僅做參考 上線會被拒絕掉 ,本人多么痛的領(lǐng)悟.......
----------------------我是華麗的分割線------------更新----------------------------
補充一個打開其他app的方法
通過urlSchemes 打開其他app (前提是要知道該app 的 urlSchemes )
另外關(guān)于如何獲取bundle_id的方法也簡單說一下.
在iOS系統(tǒng)中,IPA文件指的是iphone Application,IPA文件實質(zhì)上是一個zip壓縮包,我們在iOS系統(tǒng)上使用的軟件,最初下載的都是IPA文件.
第一步:真機連接電腦,打開itunes

//搜索建設(shè)銀行

//下載建設(shè)銀行

//下載完成后切換到資料庫

選中右鍵在finder 中顯示

//把ipa 后綴改為zip

//解壓文件并選中

//右鍵顯示包內(nèi)容 并搜索 info.plist

//會有三個info.plist 打開第三個 找到bundle_id

//這樣我們就找到了中國建設(shè)銀行的bundle_id了