【问题标题】:Objective C Google Maps API public key functionObjective C Google Maps API 公钥函数
【发布时间】:2014-04-25 04:38:36
【问题描述】:

目前,我在为给定的 Google Maps Web Services API 查询生成公钥时遇到问题。

documentation 规定必须在 URL 的路径和查询部分使用经过修改的 base-64 HMAC-SHA1 哈希生成签名。

但是,使用此功能并使用this tool 对其进行测试表明它无法正常工作。

+ (NSString *) hmac:(NSString *)data withKey:(NSString *)key{
    const char *cKey  = [key cStringUsingEncoding:NSUTF8StringEncoding];
    const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];
    unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
    CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
    NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
    NSString *hash = [HMAC base64EncodedStringWithOptions:0];
    hash = [hash stringByReplacingOccurrencesOfString:@"+" withString:@"-"];
    hash = [hash stringByReplacingOccurrencesOfString:@"/" withString:@"_"];
    return hash;
}

我正在调用此函数,其中数据已被预先编码;

[urlString stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];

我哪里出错了?非常感谢任何帮助。

【问题讨论】:

    标签: ios objective-c google-maps


    【解决方案1】:

    您可以将其用于您的网址签名:https://github.com/youssman/GMUrlSigner

    我对您的反馈和 cmets 很感兴趣 ;-)

    【讨论】:

    • 此链接已损坏。可以再提供一个吗?
    • @ParthDoshi 请再试一次。现在好了
    【解决方案2】:

    Google 有一个示例 Objective C 代码 - 是否有任何特殊原因导致您不使用它们以及代码中的一些 google 函数?特别是 CKey 的等价性不是普通的 7 位 asCII(如您的示例中编码的那样),而是 Base64(rfc4648Base64WebsafeStringEncoding)。对于不熟悉的人,Base64 通常在 mime 邮件中使用,以允许附件通过纯文本电子邮件几年前(在 HTML 邮件之前)问题是如果谷歌认为您的密钥是 base 64 而不是,解码将改变您的密钥- 例如base64 abcedfg = iy in ascii。 ...所以谷歌没有从你的 URL 获得正确的解码密钥。

    还有其他差异,但我想其中大部分只是格式。

    【讨论】:

    • 示例 Objective C 代码在哪里?我能找到的唯一与此相关的示例 sn-ps 是 C# 和 Java。所有 Objective-C 代码都与实际的 SDK API 有关,您无法从中解析路径。
    • 谁有示例 Objective C 代码的链接?
    • 示例 Obj-c 的链接:urlsigner.m
    猜你喜欢
    • 2011-03-27
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 2013-08-27
    相关资源
    最近更新 更多