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?的主要内容,如果未能解决你的问题,请参考以下文章

Vue 路由器的注入在 Je​​st 单元测试期间失败

Spring的几种注入bean的方式

如何保护带有参数化表名的查询不被注入

如何防止 XML 注入

GroovyMOP 元对象协议与元编程 ( 方法注入 | 使用 MetaClass 注入静态方法 )

如何将自己写的js注入到网站网页中