首先得了解是否设备安装了应用 通过以下代码可以知道:
NSURL *appUrl = [NSURL URLWithString:[self.appCode stringByAppendingString:@"://"]];
Bool canOpen = [[UIApplication sharedApplication] canOpenURL:appUrl];
appCode就是应用的唯一标示符 如:com.suning.SuningAppStore
如果canOpen为yes,则说明设备安装了程序,能打开,如果为no 则说明未安装程序,模拟器不能成功,必须在真机上才能测试
使用UICKeyChainStore来保存安装应用的状态
安装应用的代码
NSString *appInstallURL = [NSString stringWithFormat:kRequestAppInstallUrlPrefix@"%@", _infoModel.appDownloadPath];
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:appInstallURL]];
appDownloadPath为应用plist文件地址 如:https://iapp.suning.com/upload/app_inner/ios/20140331/0acd33c669047da3e003add1e1f9eff1.plist
当运行此代码时会弹出提示框 安装或取消 如果点击安装 则应用会退入后台 如果点取消则不会推入后台 不过都会调用applicationDidBecomeActive代理方法 此时刷新列表 是每个应用的状态正常
在选择安装后 进入后台此时应该将选择安装的应用信息 使用UICKeyChainStore保存起来
UICKeyChainStore *store = [UICKeyChainStore keyChainStoreWithService:dto.appCode];
[store setString:dto.appVcode forKey:KEYCHAIN_VERSION];
[store setString:installBeginTime forKey:KEYCHAIN_TIME];
[store synchronize];
总体规则就是当退到后台时 保存选择安装应用的信息 当进入前台时则刷新列表
再根据保存下载应用的信息 如版本 时间来判断应用的状态 从而给出正确的结果