al_applink_data 如何被注入到 stringWithContentsOfURL?
Posted
技术标签:
【中文标题】al_applink_data 如何被注入到 stringWithContentsOfURL?【英文标题】:how does al_applink_data get injected to stringWithContentsOfURL? 【发布时间】:2015-08-12 15:04:34 【问题描述】:我正在使用 Facebook 的 AppLinks 延迟深度链接 (DDL) 选项在安装时传递一些自定义深度链接信息。获得 DDL 触发器后,我调用某个外部 URL 以使用对 stringWithContentsOfURL 的简单调用来记录 DDL 活动。由于某些无法解释的原因,尽管我没有添加它(我只手动添加了 'deeplink' 和 'idfa'),但 URL 会自动注入一个 'al_applink_data' 参数。它是如何“注入”到我的 URL 调用中的?这是DDL触发代码:
- (void) onFbDeferredAppLink:(NSURL*)deeplink error:(NSError*)error
NSLog(@"onFbDeferredAppLink: %@", deeplink);
NSMutableDictionary* d = [NSMutableDictionary dictionaryWithObjectsAndKeys:
deeplink, @"deeplink",
[self getIdfa], @"idfa"
, nil];
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^
NSError* error = nil;
__block NSMutableString* s = [NSMutableString stringWithString:@"https://api.myservers.com/test.php?a=b"];
[d enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop)
[s appendFormat:@"&%@=%@", [key description], [obj description]];
];
NSURL* url = [NSURL URLWithString:s];
[NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
);
【问题讨论】:
【参考方案1】:“al_applink_data”参数是应用链接协议的一部分,因此它已经嵌入到您的深层链接网址中。深层链接 URL 基本上如下所示:
<custom_scheme>://<path>?al_applink_data=<some json blob>
【讨论】:
第一个 NSLog 输出将深层链接显示为“myapp://localhost/?aaa=bbb”——这正是我在 Facebook 活动中定义的。它不包含任何“al_applink_data”参数。如果你是正确的,那么也许 NSLog 命令并没有真正打印出整个链接?不太可能,因为它确实打印了我自己放在深度链接上的其他参数(aaa=bbb)。我错过了什么吗? al_applink_data 可能不是查询字符串中的第一个参数。这实际上会导致您的代码出现问题吗?如果您使用 obj-c 提供的标准 url 解析库,则应该没有问题。我会避免进行严格的字符串匹配,因为这不适用于 url。 从 NSLog 中可以看出,深度链接输入参数上没有 al_applink_data (除非再次,NSLog 出于某种原因没有打印整个 URL,但我无法想象为什么) .以上是关于al_applink_data 如何被注入到 stringWithContentsOfURL?的主要内容,如果未能解决你的问题,请参考以下文章