如何为自定义URL方案创建一个钩子?

时间:2014-04-14 23:12:26

标签: ios

我的应用有自定义网址方案。当用户访问我应用的浏览器页面并安装了应用后,我会将其重定向到自定义网址方案,即myapp://dosomething?ref=117

这会加载我的应用并且工作正常。

问题

在我的应用内部,如何拦截自定义网址打开的应用?我想截取dosomething?ref=117并打开一个特定的屏幕。

1 个答案:

答案 0 :(得分:1)

您可以通过AppDelegate中的以下方法处理任何网址:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
下面的

是如何提取网址

的参数的示例
- (NSDictionary*)parseURLParameters:(NSURL*)url
{
    NSArray *keyValues = [[url query] componentsSeparatedByString:@"&"];

    NSMutableDictionary *parameters = [NSMutableDictionary dictionary];

    for (NSString *keyValue in keyValues)
    {
        NSArray *components = [keyValue componentsSeparatedByString:@"="];

        NSString *parameter = components[0];
        NSString *value = components[1];

        NSDictionary *dictionary = @{parameter : value};

        [parameters addEntriesFromDictionary:dictionary];
    }

    return parameters;
}

以下代码

NSURL *url = [NSURL URLWithString:@"urlexample://host/path?parameter1=value1&parameter2=value2&parameter3=value3"];

NSLog(@"parameters of %@:\n%@", url, [self parseURLParameters:url]);

生成日志

parameters of urlexample://host/path?parameter1=value1&parameter2=value2&parameter3=value3:
{
    parameter1 = value1;
    parameter2 = value2;
    parameter3 = value3;
}