我的应用有自定义网址方案。当用户访问我应用的浏览器页面并安装了应用后,我会将其重定向到自定义网址方案,即myapp://dosomething?ref=117
这会加载我的应用并且工作正常。
问题
在我的应用内部,如何拦截自定义网址打开的应用?我想截取dosomething?ref=117
并打开一个特定的屏幕。
答案 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¶meter2=value2¶meter3=value3"];
NSLog(@"parameters of %@:\n%@", url, [self parseURLParameters:url]);
生成日志
parameters of urlexample://host/path?parameter1=value1¶meter2=value2¶meter3=value3:
{
parameter1 = value1;
parameter2 = value2;
parameter3 = value3;
}