iOS_如何判断是否安装某个App并从另一个App中启动该App(未安装跳转到AppStore)

来源:互联网 发布:农村宅基地确权数据 编辑:程序博客网 时间:2024/05/03 06:12


转载自: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”里添加如下代码:

0 0
原创粉丝点击