检查iphone是否安装某app 【转】

转自http://blog.csdn.net/zengconggen/article/details/7714514#

  开发中遇到一个问题:公司多个产品时,希望在一个产品A中可以直接打开另外的某个产品B。如果用户尚未安装产品B, 则打开app store下载页面。

 对于这个问题:有3个技术点:
 1、产品B是否已安装的检测。
 2、应用内打开其他app的技术:参考:https://developer.apple.com/library/IOs/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/AdvancedAppTricks/AdvancedAppTricks.html#//apple_ref/doc/uid/TP40007072-CH7-SW18

 3、从应用跳转至app下载页面的技术:参考:http://blog.csdn.net/zengconggen/article/details/6789420

 对于第2、3点,本文略过不讲。现提供第1技术点方案:(说明:技术有风险,有可能导致app被拒。不过app store有类似上线作品。看RP)
解决方案1:(经验证:该方案真机ios5无效,模拟器可以)

// Declaration
BOOL APCheckIfAppInstalled(NSString *bundleIdentifier); // Bundle identifier (eg. com.apple.mobilesafari) used to track apps  

// Implementation  

BOOL APCheckIfAppInstalled(NSString *bundleIdentifier)
{
    static NSString *const cacheFileName = @"com.apple.mobile.installation.plist";
    NSString *relativeCachePath = [[@"Library" stringByAppendingPathComponent: @"Caches"] stringByAppendingPathComponent: cacheFileName];
    NSDictionary *cacheDict = nil;
    NSString *path = nil;
    // Loop through all possible paths the cache could be in
    for (short i = 0; 1; i++)
    {  

        switch (i) {
    case 0: // Jailbroken apps will find the cache here; their home directory is /var/mobile
        path = [NSHomeDirectory() stringByAppendingPathComponent: relativeCachePath];
        break;
    case 1: // App Store apps and Simulator will find the cache here; home (/var/mobile/) is 2 directories above sandbox folder
        path = [[NSHomeDirectory() stringByAppendingPathComponent: @"../.."] stringByAppendingPathComponent: relativeCachePath];
        break;
    case 2: // If the app is anywhere else, default to hardcoded /var/mobile/
        path = [@"/var/mobile" stringByAppendingPathComponent: relativeCachePath];
        break;
    default: // Cache not found (loop not broken)
        return NO;
        break; }  

        BOOL isDir = NO;
        if ([[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDir] && !isDir) // Ensure that file exists
            cacheDict = [NSDictionary dictionaryWithContentsOfFile: path];  

        if (cacheDict) // If cache is loaded, then break the loop. If the loop is not "broken," it will return NO later (default: case)
            break;
    }  

    NSDictionary *system = [cacheDict objectForKey: @"System"]; // First check all system (jailbroken) apps
    if ([system objectForKey: bundleIdentifier]) return YES;
    NSDictionary *user = [cacheDict objectForKey: @"User"]; // Then all the user (App Store /var/mobile/Applications) apps
    if ([user objectForKey: bundleIdentifier]) return YES;  

    // If nothing returned YES already, we‘ll return NO now
    return NO;
}  

解决方案2:参考:http://blog.csdn.net/zengconggen/article/details/7714466
本方案有限制:只能获取到用户最近运行过的app。对于已安装但是不在最近有运行的app。不适用。

BOOL isExsit = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"rumtel://com.rumtel.AudioManager"]];
NSLog(@"App %@ installed", identifier);
if (isExsit)
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"rumtel://com.rumtel.AudioManager?a=1&b=2#sect"]];
}
else
{
    //打开app store下载页面
}  

方案3需要知道B的打开地址。可用。最终方案确定为3
附:目前公开的app相关资料:http://wiki.akosma.com/IPhone_URL_Schemes
时间: 2024-11-07 16:16:25

检查iphone是否安装某app 【转】的相关文章

在iphone上安装多个微信 【微信营销必备】

做微信营销有很多因素会影响,xmyanke认为微信消息的活跃度会让你的微信公众号在微信搜索排名靠前,既然那样,我们可以通过运营几个小号来达到目的.每每当你在几个微信小号之间切换的时候有没要奔溃的赶脚?有没办法在一个手机上安装多个微信呢?幸好大神们早就想到了,下面我们就介绍一下在iphone上安装多个微信,android版暂还没破解 首先需要用PC下载2个软件:一个是plist Editor,这个软件用来修改微信xml文件(修改微信安装包既微信IPA). 另外一个是itools,或者91助手,用于

如何将IPhone应用软件发布到App Store的

转自:http://www.shtion.com/667.html 怎样将IPhone应用程序软件公布到应用程序商店? 2009年10月19日公布 分类: App store, iphone, 手机应用 本文作者: shtion ? 本文暂无评论 首先,您要申请开发人员账号. 登录开发人员中心,右側有个Portal的链接,点击进去就是自己账号的管理中心,初次进入有个向导,能够帮你创建一个开发人员证书.(最好是下载它的完整的向导说明书,是一个PDF,7M多,步骤还是挺具体的.可是这本手冊在网上没有

如何用js检测手机是否安装某个app

问题描述 如果本地安装了app那么直接打开,否则苹果要跳转到app-store,安卓则要跳到对应的市场 解决方案 一 //html代码中 的 a 标签,以微信为例,默认的是调用weixin scheme,去打开本机的微信,如果没有则跳转到相应连接 <a href="weixin://" class="btn-download">立即打开</a> // 为btn-download 绑定事件,如果在500ms内,没有解析到协议,那么就会跳转到下载

如何在iPhone上安装Skype?

如何在iPhone上安装Skype? ?Lander Zhang 专注外企按需IT基础架构运维服务,IT Helpdesk 实战培训践行者http://blog.51cto.com/lander 2018/10/29 8:00 问题描述 前几天听到我们某外企客户的美女采购说用手机拨打国际长途太贵了,我说可以用Skype,通话质量完全可以接受而且资费便宜,我自己也一直都在用.她说她的Skype已经用不了了,是啊,因为某些中所周知的原因,Skpye for iPhone 已经在中国Apple Sto

Android - 安装应用(APP) 不显示图标

安装应用(APP) 不显示图标 本文地址:http://blog.csdn.net/caroline_wendy 在启动的activity的AndroidManifest注册中,添加隐式启动的data: <!-- 启动界面 --> <activity android:name="me.wcl.Activities.WelcomeActivity" android:configChanges="keyboardHidden" android:labe

获取手机所有安装的app(转的)

获取手机所有安装的app by 伍雪颖 Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace"); NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)]; NSLog(@"apps: %@", [workspace performSe

用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送的官方API以及帮助文档都在这里:http://docs.jpush.cn/display/dev/Index 其中服务端的接口以及示例代码都在这里:http://docs.jpush.cn/display/dev/Server-SDKs 大家有兴趣的可以看看,因为这次我做的不是客户端APP,所以一

移动支付应用危机:安装山寨App后钱去哪儿了

随着"手机购物"."微信红包" ."软件打车"等成为搜索热门词,手机里的移动互联网也越来越成为人们再也离不开的小伙伴,手机支付更是许多年轻人常用的支付方式.不过,爱加密安全专家提醒:目前移动支付安全问题严重,手机支付虽然便利,却也面临巨大的安全风险. 安装山寨App次日银行卡被盗刷 市民王小姐在一天下午收到了一条带有网址链接的信息,打开一看,是某银行的网银App.正巧王小姐要给朋友汇几百块钱,便下载安装了App,输入了银行密码,没想到,第二天收到

手机版_仿微信 陌陌 安卓版(android)/苹果版(iPhone ios),移动社交APP系统源码,企业即时通讯APP程序源码,手机聊天软件源码,移动聊天APP开发

一:系统背景 根据国际电信联盟发布的<衡量信息社会发展报告>中显示:2014年全球手机用户已超过70亿人,全球互联网用户已超过30亿人,世界上移动通信设备用户总数已超过世界总人口数(还在稳定增长中).根据工业和信息化部发布的数据显示:目前我国移动电话用户规模将近13亿,移动互联网用户规模接近9亿,占总网民数的八成多(我国已是全球移动互联网第一大国).4G/5G时代的开启以及移动终端设备的凸显为移动互联网的发展注入巨大的能量,中国移动互联网产业即将迎来前所未有的飞跃. 二:编写目的 事实证明我国