首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保护付费iPhone应用程序所需的外部资源

保护付费iPhone应用程序所需的外部资源
EN

Stack Overflow用户
提问于 2009-11-12 03:37:51
回答 5查看 375关注 0票数 0

我已经开发了一个应用程序,目前在应用程序商店中,重量超过400MB。主要原因是该应用程序具有大量视频,这些视频目前已被烘焙到二进制文件中。

对于我们的下一个版本,我们希望将此视频外部化,允许用户下载他们想要保留的视频,并删除他们已经看过的视频。我们目前正在采购CDN等,现在正在努力解决我们如何保护这个视频。

问题是,如果我们只使用mp4s的标准urls,没有应用程序的人将能够通过网络下载我们的视频,这意味着我们将为付费客户提供服务。我们有没有办法保护这些视频,使它们不会轻易被窃取?(我说“很容易”,因为我相信一旦下载了视频,人们总能找到方法将它们从应用程序中删除,并将它们放到bit torrent上,但如果他们在偷窃,如果我们不需要支付带宽费用就好了……)

我在想,也许我们可以以某种方式生成一次性的urls,这些urls是使用设备的UDID的某种散列请求的,然后在服务器上进行验证,然后允许用户通过该urls进行下载。或者这只是一派胡言?

这个问题的合理解决方案是什么?

提前谢谢你,

更新:不幸的是,我不能使用应用程序内购买机制,因为这个应用程序是好的和真正的存在,所以需要找到我自己的方式来保护我们的内容。

这可以作为一种解决方案吗:(请原谅我的术语,通常是客户端程序员)

1)服务器端,每隔5-10分钟生成一个随机令牌,app可以请求。

2)一旦应用程序有了这个令牌,它就会使用此令牌、设备UDID和在应用程序中烘焙的密钥通过md5或其他方式生成另一个令牌

3)设备使用新令牌和设备UDID向服务器发出请求

4)服务器尝试验证,方法是在服务器端(使用相同的魔术密钥)重复相同的过程,并查看它使用提供的udid生成的令牌是否与应用程序发出请求的令牌匹配。如果是这样,它将传递该文件。

这样行得通吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-11-12 05:42:16

我认为你的建议和我的建议是一致的。

举个例子,看看亚马逊S3的链接过期方法。我用PHP编写了以下帮助程序来生成这些链接(与Zend Framework的Zend____Crypt____Hmac一起工作,有关更多信息,请参阅http://framework.zend.com/wiki/pages/viewpage.action?pageId=35309 ):

代码语言:javascript
复制
    public function getExpiredQueryString($objectName, $expireTime, $bucketName){
          $stringToSign = "GET\n\n\n$expireTime\n/$bucketName/tracks/$objectName";
          $hashedSignature = Zend_Crypt_Hmac::compute(self::AMAZON_AWS_SECRET_KEY, 'sha1', utf8_encode($stringToSign));
          $signature = urlencode($this->_hex2b64($hashedSignature));

          $url = 'http://' . $bucketName . '.s3.amazonaws.com/tracks/' . $objectName . '?AWSAccessKeyId=' . self::AMAZON_AWS_KEY . '&Expires=' . $expireTime . '&Signature=' . $signature; 
          return $url;
    }

以下是_hex2b64的内容(不是原创的,但看起来很有帮助):

代码语言:javascript
复制
    private function _hex2b64($str){
          $raw = '';
          for ($i=0; $i < strlen($str); $i += 2)
          {
              $raw .= chr(hexdec(substr($str, $i, 2)));
          }
          return base64_encode($raw);   
     }

简而言之,您可以创建一个标记化的链接结构,该结构可能在数据库表(例如)中具有一个ttl,用于验证您的用户并授权您的资产的下载/流。

就可伸缩性而言,您需要探索所有选项,包括数据库、web服务器、操作系统的选择,服务器端代码库的整体效率等。这是一个更大的对话。

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2009-11-12 03:39:45

你可以免费提供应用程序,并以应用程序内购买的方式提供视频。您的服务器可以使用一个API来验证IAP收据,以确保客户确实通过Apple合法购买了该商品。

票数 1
EN

Stack Overflow用户

发布于 2009-11-12 03:40:56

您可以始终让iPhone应用程序向服务器发送一个包含其IP地址的请求;然后,在您的服务器上,返回一个仅允许访问该IP的下载的URL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1717547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档