前言:
非越狱设备,在你的应用里无法知道系统安装了什么别的应用。
如果想要准确的通过程序控制和发现本地安装的应用,目前只能在破解版的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的方法即可跳转到评价界面哦!
苹果公司iOS9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。
受此影响,当你的应用在iOS9中需要使用QQ、QQ空间、支付宝、微信 SDK的相关功能(分享、收藏、支付、登录等)时,需要在“Info.plist”里添加如下代码: