自定义 URL 方案的问题

Posted

技术标签:

【中文标题】自定义 URL 方案的问题【英文标题】:Issues with custom Url Schemes 【发布时间】:2016-11-30 13:57:16 【问题描述】:

我有一个应用,比如说 2 个应用 - app1,app2 假设我从 app1 app2 打开。 如何使用自定义 url 方案从 app2 发回数据,例如在 facebook 应用程序中? 如果我用 url 重新打开 app1,我会看到回到 app2,这对我的情况来说不是一个好主意。 我想以模态方式打开 app2,并用返回的数据将其关闭。这可能吗?

【问题讨论】:

【参考方案1】:

您可以从 info.plist 文件中为您的应用定义自定义 URL 架构。您可以为此检查SO 上的现有线程。

在您的情况下,例如在 app1- 定义自定义 url myAppOneScheme 和在您的 app2 中,定义自定义 url myAppTwoScheme

当你从 app 1 打开 app2 时,传递 app1 的 url 如下:

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"myAppOneScheme://test?callerURL= myAppOneScheme"]];

来自app2,处理openURL方法:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 
    NSLog(@"url recieved: %@", url);
    NSLog(@"query string: %@", [url query]);
    NSLog(@"host: %@", [url host]);
    NSLog(@"url path: %@", [url path]);
    NSDictionary *dict = [self parseQueryString:[url query]];
    NSLog(@"query dict: %@", dict);
//   NSString callerurl = parse callerURL from query

//  store callerurl in user default or global variable. 
    return YES;

当您在 app2 中完成操作并想返回 app1 时,打开调用方 url

  [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:"%@//testback?response=%@", caller url , datayouwanttoSendback]]];

现在,在您的 app1 中,再次处理打开 url 方法并解析响应

【讨论】:

好的,在这种情况下,我会看到回到 app1,在 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:"%@//testback?response=%@", caller url , datayouwanttoSendback] 来自 ios 系统 api,就像回到 safari. 对吗? 我希望它像 facebook 从下到上以模态方式打开并像关闭控制器一样关闭

以上是关于自定义 URL 方案的问题的主要内容,如果未能解决你的问题,请参考以下文章

自定义 URL 方案 ios 9

自定义 URL 方案

iOS 10 自定义 URL 方案不再有效

第一次未调用 Cocoa 自定义 URL 方案选择器

在 Cordova 中使用带有自定义 URL 方案的 handleOpenURL

我可以在 Phonegap Build 中为 iOS 定义自定义 URL 方案吗?