[英]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.