我的应用注册了一个截获一个特定 URL 的 NSURLProtocol 子类。该协议使用密钥回复请求。
@implementation PrivateURLProtocol
// ignore everything besides keyURL
+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
return [request.URL isEqual:keyURL];
}
// respond with secret key
– startLoading
{
NSURLResponse *response = [[NSURLResponse alloc] initWithURL:self.request.URL
MIMEType:@"text/plain" expectedContentLength:-1 textEncodingName:nil];
[self.client URLProtocol:self didReceiveResponse:response
cacheStoragePolicy:NSURLCacheStorageNotAllowed];
NSData *data = [@"Swordfish" dataUsingEncoding:NSUTF8StringEncoding];
[self.client URLProtocol:self didLoadData:data];
[self.client URLProtocolDidFinishLoading:self];
}
// boilerplate
– (void)stopLoading { }
+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request {
return request;
}
@end
只有我的代码和我链接的库应该能够看到密钥。有进取心的用户如何获得我的密钥?这安全吗?
对于那些好奇的人,这是 DRM 设置的一部分。AVPlayer 将请求密钥,以便它可以播放加密媒体。