1. 程式人生 > >iOS_如何判斷是否安裝某個App並從另一個App中啟動該App(未安裝跳轉到AppStore)

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”裡新增如下程式碼: