在 IOS 中打开 URL 个方案
Open URL Schemes in IOS
我有 2 个应用程序,它们用于不同的目的,我不应该允许用户在同一设备上使用这两个应用程序。如何检查是否安装了其他应用程序?
我想我可以使用 Open URL 来做到这一点,如下所示,通过放置不起作用的应用程序包 ID,我不得不为我的应用程序获取 url
例如:"fb://"
if ([[UIApplication sharedApplication] canOpenURL:@"My App URL"]) {
//App installed
}
else{
//App Not installed
}
了解应用是否安装
-(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
}
请记住将第二个应用程序的 url 方案包含在第一个应用程序 LSApplicationURLScheme 的 Info.plist 中。
转到 Xcode 中的项目 > 目标 > 信息 > URL 类型部分。这里必须添加两个URL方案,Sign-InSDK需要正确设置才能正常工作。使用加号按钮,在 URL Schemes 字段中输入应用程序包 ID 值(例如 com.admin.myApp)。
然后在你的代码中使用这个
if ([[UIApplication sharedApplication] canOpenURL:@"com.admin.myApp://"]) {
//App installed
}
else{
//App Not installed
}
你有 2 个 Apps.Now 你想从第二个打开第一个应用程序 App.I 会给你一步一步的指导,请按照那个。
我的第一个应用程序名称是 LinkAppSample,第二个应用程序名称是 LinkSecondApp
STEP 1: Add the below things in first app 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>
见下方截图
STEP 2: Go to Second App.My Second App Name is LinkSecondApp.Now click LinkSecondApp project.Click TARGETS and click
info.Then Click URL Type and add or write or set name in URL Schemes
Target->Info->URL types->Add url types
目标的首次点击信息
然后单击 URL Tpes.Once 你单击它会看到 + 符号。
现在点击+符号并在URL中给出应用程序的名称Schemes.You必须将Rote设置为Viewer
注意:您的 URL 方案名称必须相同(第一个应用程序 Plist 名称和第二个应用程序 URL 方案名称在这里是 chatapp)。
STEP 3: Now you must add code in Second application LinkSecondApp for
opening the First app.
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];
}
}
Swift 3.0 有效答案:
一切都与选定的相同(上面的答案由 user3182143 回答,因为这导致其他用户很少出现问题所以我这样回答,只有代码实现是不同的休息按照上面正确答案回答相同的步骤)
But code implementation is different now :
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 link 然后它会打开应用程序 link(上面的函数调用下面的最终启动方法):
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 和 iOS10,请随时分享您的反馈和评论。
我刚刚经历了这个,发现接受的答案非常混乱,所以我正在做我的。
从 app2 打开 app1
1) 在 app1 中:声明应用可以处理的自定义方案
您可以直接在 app1.plist 文件 或 中通过视觉 info 在文本中执行此操作编辑器(目标 > 信息 > 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>
2) 在app2中:声明应用程序可以调用的方案(白名单)
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myscheme</string>
</array>
3) 在 app2 中:在某处调用此方法
- (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];
}
}
}
当然是scheme(这里myscheme必须三部分匹配)
非常简单,据我所知 这就是所需的一切!
我有 2 个应用程序,它们用于不同的目的,我不应该允许用户在同一设备上使用这两个应用程序。如何检查是否安装了其他应用程序? 我想我可以使用 Open URL 来做到这一点,如下所示,通过放置不起作用的应用程序包 ID,我不得不为我的应用程序获取 url 例如:"fb://"
if ([[UIApplication sharedApplication] canOpenURL:@"My App URL"]) {
//App installed
}
else{
//App Not installed
}
了解应用是否安装
-(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
}
请记住将第二个应用程序的 url 方案包含在第一个应用程序 LSApplicationURLScheme 的 Info.plist 中。
转到 Xcode 中的项目 > 目标 > 信息 > URL 类型部分。这里必须添加两个URL方案,Sign-InSDK需要正确设置才能正常工作。使用加号按钮,在 URL Schemes 字段中输入应用程序包 ID 值(例如 com.admin.myApp)。
然后在你的代码中使用这个
if ([[UIApplication sharedApplication] canOpenURL:@"com.admin.myApp://"]) {
//App installed
}
else{
//App Not installed
}
你有 2 个 Apps.Now 你想从第二个打开第一个应用程序 App.I 会给你一步一步的指导,请按照那个。
我的第一个应用程序名称是 LinkAppSample,第二个应用程序名称是 LinkSecondApp
STEP 1: Add the below things in first app 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>
见下方截图
STEP 2: Go to Second App.My Second App Name is LinkSecondApp.Now click LinkSecondApp project.Click TARGETS and click info.Then Click URL Type and add or write or set name in URL Schemes Target->Info->URL types->Add url types
目标的首次点击信息
然后单击 URL Tpes.Once 你单击它会看到 + 符号。
现在点击+符号并在URL中给出应用程序的名称Schemes.You必须将Rote设置为Viewer
注意:您的 URL 方案名称必须相同(第一个应用程序 Plist 名称和第二个应用程序 URL 方案名称在这里是 chatapp)。
STEP 3: Now you must add code in Second application LinkSecondApp for opening the First app.
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];
}
}
Swift 3.0 有效答案:
一切都与选定的相同
But code implementation is different now :
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 link 然后它会打开应用程序 link(上面的函数调用下面的最终启动方法):
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 和 iOS10,请随时分享您的反馈和评论。
我刚刚经历了这个,发现接受的答案非常混乱,所以我正在做我的。
从 app2 打开 app1
1) 在 app1 中:声明应用可以处理的自定义方案
您可以直接在 app1.plist 文件 或 中通过视觉 info 在文本中执行此操作编辑器(目标 > 信息 > 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>
2) 在app2中:声明应用程序可以调用的方案(白名单)
<key>LSApplicationQueriesSchemes</key>
<array>
<string>myscheme</string>
</array>
3) 在 app2 中:在某处调用此方法
- (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];
}
}
}
当然是scheme(这里myscheme必须三部分匹配)
非常简单,据我所知 这就是所需的一切!