繁体   English   中英

Objective C Google Maps API公钥功能

[英]Objective C Google Maps API public key function

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

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

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

+ (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];

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

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

我对您的反馈和意见感兴趣;-)

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

还有其他差异,但我猜大多数只是格式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM