我有2个应用程序,这些应用程序用于不同目的,我不应该允许用户在同一设备中使用这两个应用程序。如何检查是否安装了其他应用程序? 我想我可以使用Open URL来实现它,如下所示,通过放置无效的应用程序包ID,我坚持为我的应用程序获取URL EX:“fb://”
if ([[UIApplication sharedApplication] canOpenURL:@"My App URL"]) {
//App installed
}
else{
//App Not installed
}
答案 0 :(得分:5)
你有2个App。现在你想从第二个应用程序打开第一个应用程序。我会按照你的说明逐步指导。
我的第一个应用名称是LinkAppSample,第二个应用名称是LinkSecondApp
第1步:在第一个应用 LinkAppSample
中添加以下内容
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.example.com</string>
<key>CFBundleURLSchemes</key>
<array>
<string>chatapp</string>
</array>
</dict>
</array>
然后你需要添加
<key>LSApplicationQueriesSchemes</key>
<array>
<string>chatapp</string>
</array>
请参阅下面的截图
第2步:转到第二个应用程序。我的第二个应用程序名称是LinkSecondApp.Now单击LinkSecondApp项目。单击TARGETS并单击 info.Then点击URL Type并在URL Schemes中添加或写入或设置名称 目标 - &gt;信息 - &gt;网址类型 - &gt;添加网址类型
首先点击目标信息
然后点击URL Tpes。点击它就会显示+符号。
现在点击+符号并在URL Schemes中提供应用程序的名称。您必须将Rote设置为Viewer
注意:您的URL方案名称必须相同(此处的第一个App Plist名称和第二个App URL方案名称为chatapp)。
步骤3:现在您必须在第二个应用程序LinkSecondApp中添加代码 打开第一个应用程序。
LinkSecondApp.m
-(IBAction)actionOpenFirstApp:(id)sender
{
NSString *customURL = @"chatapp://";
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:@"chatapp://"];
if ([application respondsToSelector:@selector(openURL:options:completionHandler:)])
{
[application openURL:URL options:@{}
completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",customURL,success);
}];
}
else {
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Error!" message:@"No Custom URL is defined" preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
[alertController addAction:ok];
[self presentViewController:alertController animated:YES completion:nil];
}
}
答案 1 :(得分:3)
Swift 3.0正在运行答案:
所有内容都与选定的answer相同(以上答案由user3182143 回答),因为这会引起其他用户的问题,所以我这样回答,只有代码实现不同其他按以上正确答案回答的步骤)
但现在代码实现不同了:
let kCustomURLScheme = "yourappscheme://"
func openCustomApp() {
if (UIApplication.shared.canOpenURL(URL(string:kCustomURLScheme)!)) {
print("true")
}
if openCustomURLScheme(customURLScheme: kCustomURLScheme) {
// app was opened successfully
} else {
// handle unable to open the app, perhaps redirect to the App Store
print("unable to open , go to itune store to download it ")
}
}
此功能使用APPSCHEME检查是否可以启动任何已安装的具有特定APPSCHEME的应用程序,如果是,那么它将启动其他如果你有应用程序iTune链接然后它将打开应用程序链接(上面的函数调用下面的方法进行最终启动):
func openCustomURLScheme(customURLScheme: String) -> Bool {
let customURL = URL(string: customURLScheme)!
if UIApplication.shared.canOpenURL(customURL) {
if #available(iOS 10.0, *) {
UIApplication.shared.open(customURL)
UIApplication.shared.open(URL(string: "https://itunes.apple.com/in/app/appname/id404249815?mt=8")!, options: [:], completionHandler: nil)
} else {
UIApplication.shared.openURL(customURL)
}
return true
}
return false
}
此代码适用于Swift3.0和iOS 10,随时可以分享您的反馈和评论。
答案 2 :(得分:1)
了解是否安装了应用
-(BOOL) isAppInstalled:(NSString *)appUrl{
return [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:appUrl]]; // @ is not needed as you are passing input of function as a parameter.
}
要知道是否安装了任何应用,请调用此功能
if( [self isAppInstalled:@"MyApp2://"]) {
NSLog("The second app is installed"); //Perform your actions
}
请务必在其Info.plist中的第一个应用程序LSApplicationURLScheme中包含第二个应用程序的网址方案。
答案 3 :(得分:1)
我刚刚通过这个,发现接受的答案非常令人困惑所以我正在制作我的。
您可以直接在 app1.plist 文件或中通过视觉信息编辑器(目标&gt;信息&gt; URLTypes)
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Viewer</string>
<key>CFBundleURLName</key>
<string>com.mycompany.myapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>myscheme</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myscheme</string>
</array>
- (void)callApp1
{
NSString *customURL = @"myscheme://";
UIApplication *application = [UIApplication sharedApplication];
NSURL *URL = [NSURL URLWithString:customURL];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
if ([application respondsToSelector:@selector(openURL:options:completionHandler:)]) {
[application openURL:URL options:@{}
completionHandler:^(BOOL success) {
NSLog(@"Open %@: %d",customURL,success);
}];
} else {
BOOL success = [application openURL:URL];
NSLog(@"Open %@: %d",customURL,success);
}
}
else {
if ([application canOpenURL:URL]) {
[application openURL:URL];
}
}
}
当然这个方案(这里的myscheme必须在三个部分中匹配)。
非常简单,据我所知这就是所有需要的!
答案 4 :(得分:0)
转到项目&gt;目标&gt;信息&gt; Xcode中的URL类型部分。在这里,我们必须添加两个URL方案,Sign-In SDK需要正确设置才能正常工作。使用加号按钮,在URL Schemes字段中输入应用程序包ID值(例如com.admin.myApp)。
然后在你的代码中使用这个
if ([[UIApplication sharedApplication] canOpenURL:@"com.admin.myApp://"]) {
//App installed
}
else{
//App Not installed
}