【问题标题】:How to take the parameter from URL scheme.如何从 URL 方案中获取参数。
【发布时间】:2013-02-27 22:07:26
【问题描述】:

我在我的 iPhone 应用程序中使用 URL 方案,从我将用户切换到 safari 的页面,以及从网页单击按钮,我正在恢复到应用程序 那时,一些参数是由网页传递的,例如

 myapp://parameter=1

如何从我的应用中找到此参数? 我在

中放置了一个断点
    -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)ur

但在恢复时,它不会被调用。

【问题讨论】:

  • 如何启动您的应用程序?尝试在 safari 中输入网址。您是否从此方法返回 YES?

标签: ios iphone objective-c nsurl url-scheme


【解决方案1】:

试试这个代码。即使您在 url 中有许多参数和值,这也会很有用。

NSURL *url = [NSURL URLWithString:@"xyz.com/result.php?data1=1123660801&data2=250072028055&presult=SUCCESS"];

NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];
NSArray *queryItems = [components queryItems];

NSMutableDictionary *dict = [NSMutableDictionary new];

for (NSURLQueryItem *item in queryItems)
{
    [dict setObject:[item value] forKey:[item name]];
}

【讨论】:

  • 这应该是答案,只是让回答问题更具体。
【解决方案2】:

您可以使用url host 来查找参数,其中参数可以是任何类型,http:// 或自定义标记custom:// 之后的任何内容都将被以下代码捕获

 NSString *urlParameter = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

如果你有多个参数,那么你可以使用componentsSeparatedByString方法来分隔参数

【讨论】:

  • 只在这个-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url方法中使用,当你点击自定义链接时尝试NSLog那里的值,它会打印出parameter=1
  • 您知道如何在 vanilla c++ 中实现这一点吗? Carbon中是否有等效功能?
【解决方案3】:
NSString *query = [url query];
NSArray *queryComponents = [query componentsSeparatedByString:@"&"];

现在你得到了 queryComponents 中的所有字符串,比如

param1=value

现在你可以得到这样的第一个值

NSArray *firstParam = [[queryComponents objectAtIndex:0] componentsSeparatedByString:@"="];

[firstParam objectAtIndex:0] is the name of param
[firstParam objectAtIndex:1] is value of the param

【讨论】:

  • @Mert 我在创建时尝试查询我的自定义链接,但我从未在查询中得到任何内容,可能是因为我在customtag:// 之后有自定义参数所以我更喜欢使用[url host]
  • 如果你有这样的 URL,customschema://myhost/?param=1&secondParam=2 就可以了。这很常见,网址看起来像这样。我在我的应用程序中使用 myhost 执行不同的操作,例如 showAlert、showsomeview 等...然后我可以检查该做什么
  • 你可以在你的 -(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 方法中使用它。你这里有网址
猜你喜欢
  • 2022-06-18
  • 2013-06-08
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2017-03-27
相关资源
最近更新 更多