Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C谷歌地图API公钥函数_Ios_Objective C_Google Maps - Fatal编程技术网

Ios 目标C谷歌地图API公钥函数

Ios 目标C谷歌地图API公钥函数,ios,objective-c,google-maps,Ios,Objective C,Google Maps,目前,我在为给定的GoogleMapsWeb服务API查询生成公钥方面遇到了问题 协议规定,必须在URL的路径和查询部分使用修改后的base-64 HMAC-SHA1哈希生成签名 但是,使用此函数并使用进行测试表明它无法正常工作 + (NSString *) hmac:(NSString *)data withKey:(NSString *)key{ const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];

目前,我在为给定的GoogleMapsWeb服务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];

我哪里做错了?非常感谢您的帮助。

谷歌有一个示例Objective C代码-您不使用这些代码和代码中的一些谷歌函数有什么特殊原因吗?特别是,CKey的等效性不是普通的7位asCII(如示例中所编码的),而是Base64(rfc4648Base64WebsafeStringEncoding)。对于不熟悉的人来说,Base64通常在mime邮件中使用,以允许附件在几年前(HTML邮件之前)通过纯文本邮件发送。问题是,如果google认为您的密钥是Base64,而它不是,解码将更改您的密钥-例如ascii中的Base64 abcedfg=iy。。。所以谷歌没有从你的URL中获得正确的解码密钥


还有其他不同之处,但我想大多数只是形式上的不同

您可以将其用于url签名:


我对您的反馈和评论感兴趣;-)

示例目标C代码在哪里?我能找到的唯一与此相关的示例片段是在C#和Java中。所有Objective-C代码都与实际的SDK API相关,您无法从中解析路径。是否有人有到示例Objective-C代码的链接?到示例Obj-C的链接:此链接已断开。你能再提供一个吗?@ParthDoshi请再试一次。现在可以了