iOS_如何判斷是否安裝某個App並從另一個App中啟動該App(未安裝跳轉到AppStore)
轉載自:http://blog.csdn.net/delegate_m/article/details/51263059
非常感謝博主的分享
前言:
非越獄裝置,在你的應用裡無法知道系統安裝了什麼別的應用。
如果想要準確的通過程式控制和發現本地安裝的應用,目前只能在破解版的iOS
上開始顯示,但是我們可以通過一些其他的途徑獲取到手機是否安裝過某些應用。
正文:
一、如何判斷是否安裝App
用 UIApplication 的 canOpenUrl 方法,當然前提是要檢測的應用程式註冊了一個唯一的url標識,並且你知道該標識url。
1、註冊該App的唯一url標識
我們都知道蘋果手機中的APP都有一個沙盒,APP就是一個資訊孤島,相互是不可以進行通訊的。但是iOS的APP可以註冊自己的URLScheme,URLScheme是為方便app之間互相呼叫而設計的。我們可以通過系統的OpenURL來開啟該app,並可以傳遞一些引數。
Info.plist中新增URL
Schemes :***
你訪問的URL
為:***://
在Safari中輸入***://即可跳轉到你的App
從瀏覽器跳入到app中:
(當系統中需要安裝了該app,直接開啟該app,若沒有直接跳轉到app下載頁面。 暫時沒好的解決方案,訪問***://的同時,也開啟app下載頁面,使瀏覽器先操作***://,然後在開啟app下載頁面)
在AppDelegate中實現下面的方法
- (BOOL
)application:(UIApplication *)application handleOpenURL
:(NSURL *)url;
從app跳入其他的app
這個方法判斷手機中是否存在這個應用
[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"***://"]]
返回值為BOOL型別
如果返回YES則表示此應用在手機中安裝過,反之則沒有安裝過.
還有一種,就是判斷手機中有那些軟體處於執行等待狀態:
NSArray * processes = [[UIDevice currentDevice] runningProcesses];
for (NSDictionary * dict in processes){
NSLog(@”%@ – %@”, [dict objectForKey:@"ProcessID"], [dict objectForKey:@"ProcessName"]);
}
iOS 從C APP裡啟動 D APP
首先在D APP裡設定 URL Schemes
在info.plist 檔案裡新增URL Schemes
URL Types -->item0 --> URL Schemes --> yipai
然後再回到C APP 找到info.plist 檔案
新增 LSApplicationQueriesSchemes --> item0 yip
(單擊左側按鈕至方向朝下,再單擊中間的新增+按鈕即可新增)
判斷是否安裝D APP:
BOOL isInstalled = [[UIApplicationsharedApplication] canOpenURL:[NSURLURLWithString:@"yipai://"]];
注意“://”後面可以任意傳引數。這些引數傳過去後當跳到B時會在-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 這個方法裡實現。
if ([[UIApplication sharedApplication] canOpenURL:urlT])
{
NSLog(@"xxxx");
[[UIApplication sharedApplication] openURL:urlT];
}
二、如何從App中跳轉到某個App
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"yipai://"]];
三、如何跳轉到AppStore
首先找到應用程式的描述連結:
Mac上開啟iTunes, 進入App Store搜尋你的App
點選下載右側的下拉選單按鈕
複製連結即可得到:
https://itunes.apple.com/cn/app/yi-pai-quan-shou-gong-zhi/id980932555?mt=8
找到應用程式的描述連結後,比如:http://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
然後將 http:// 替換為 itms:// 或者 itms-apps://:
itms://itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
itms-apps:// itunes.apple.com/gb/app/yi-dong-cai-bian/id391945719?mt=8
//實現下面的程式碼即可實現跳轉到App Store,注意需要真機才能除錯成功,模擬器沒有App Store
NSString *str = @"itms-apps://itunes.apple.com/cn/app/yi-pai-quan-shou-gong-zhi/id980932555?mt=8";
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:str]];
示例程式碼:
BOOL isInstalled = [[UIApplicationsharedApplication] canOpenURL:[NSURLURLWithString:@"yipai://"]];
if (isInstalled) {//如果安裝了該應該,開啟該應用
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"yipai://"]];
} else {//如果未安裝,跳轉到App Store下載
[[UIApplicationsharedApplication] openURL:[NSURLURLWithString:@"itms-apps://itunes.apple.com/cn/app/yi-pai-quan-shou-gong-zhi/id980932555?mt=8"]];
}
[程式碼] iOS 跳轉AppStore的兩種方法,應用內和直接跳轉(注意:需要真機除錯哦)
iOS模擬器中沒有AppStore,所以這項功能只能使用真機測試
#import "ViewController.h"
#import
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
//第一種方法 直接跳轉
UIButton *btn = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 50)];
btn.backgroundColor = [UIColor redColor];
[btn setTitle:@"直接跳轉" forState:UIControlStateNormal];
btn.tag = 1;
[btn addTarget:self action:@selector(btn:) forControlEvents:UIControlEventTouchUpInside];
//第二中方法 應用內跳轉
UIButton *btnT = [[UIButton alloc]initWithFrame:CGRectMake(100, 300, 100, 50)];
btnT.backgroundColor = [UIColor purpleColor];
btnT.tag = 2;
[btnT setTitle:@"應用內跳轉" forState:UIControlStateNormal];
[btnT addTarget:self action:@selector(btn:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
[self.view addSubview:btnT];
}
- (void)btn:(UIButton *)btn{
if (btn.tag == 1) {
//第一種方法 直接跳轉
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"itms-apps://itunes.apple.com/app/id1018221712"]];
}else{
//第二中方法 應用內跳轉
//1:匯入StoreKit.framework,控制器裡面新增框架#import
//2:實現代理SKStoreProductViewControllerDelegate
SKStoreProductViewController *storeProductViewContorller = [[SKStoreProductViewController alloc] init];
storeProductViewContorller.delegate = self;
// ViewController *viewc = [[ViewController alloc]init];
// __weak typeof(viewc) weakViewController = viewc;
//載入一個新的檢視展示
[storeProductViewContorller loadProductWithParameters:
//appId
@{SKStoreProductParameterITunesItemIdentifier : @"1018221712"} completionBlock:^(BOOL result, NSError *error) {
//回撥
if(error){
NSLog(@"錯誤%@",error);
}else{
//AS應用介面
[self presentViewController:storeProductViewContorller animated:YEScompletion:nil];
}
}];
}
}
#pragma mark - 評分取消按鈕監聽
//取消按鈕監聽
- (void)productViewControllerDidFinish:(SKStoreProductViewController *)viewController{
[self dismissViewControllerAnimated:YES completion:nil];
}
四、如何跳轉到AppStore評價介面
你登陸itunes connect,並且建立個APP就能得到個app id,不需要說上架才能看到,你只要建立了就能在iTunes connect相應的APP資訊中看到這個app id,在“itms-apps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=”等號後面加上你的appid,這樣就是評價地址了
用OpenUrl的方法即可跳轉到評價介面哦!
PS:
蘋果公司iOS9系統策略更新,限制了http協議的訪問,此外應用需要在“Info.plist”中將要使用的URL Schemes列為白名單,才可正常檢查其他應用是否安裝。
受此影響,當你的應用在iOS9中需要使用QQ、QQ空間、支付寶、微信 SDK的相關功能(分享、收藏、支付、登入等)時,需要在“Info.plist”裡新增如下程式碼: