我是iphone应用程序开发新手,现在正在开发应用程序内购买应用程序。从iTunes重新安装应用内购买应用程序
开发一个应用程序,实现应用程序内购买与试用期一周时间,用户安装应用程序&使用它到试用期,然后他重新安装从iTunes,并再用一个试用期。我的问题是,如果他没有购买应用程序,那么无法再重新安装。我怎样才能控制用户删除&重新安装不从iTunes购买应用程序。
我是iphone应用程序开发新手,现在正在开发应用程序内购买应用程序。从iTunes重新安装应用内购买应用程序
开发一个应用程序,实现应用程序内购买与试用期一周时间,用户安装应用程序&使用它到试用期,然后他重新安装从iTunes,并再用一个试用期。我的问题是,如果他没有购买应用程序,那么无法再重新安装。我怎样才能控制用户删除&重新安装不从iTunes购买应用程序。
您可以将用户的唯一标识符与第一次打开该应用程序的时间戳一起存储在服务器的数据库中。然后,当用户第一次打开应用程序时,请检查服务器以确保其一周未过期。
要获得设备的唯一标识符,您可以使用[[UIDevice sharedDevice] uniqueIdentifier]
,它返回一个字符串。但是,此方法已被弃用,因此您应该查看唯一标识设备的备用方法(例如,通过散列wifi mac地址)。
这个唯一的限制是你必须要求用户有互联网接入才能启动应用程序,所以如果用户在每次重新安装后都禁用了Internet访问,并且每次启动时都保持Internet禁用应用程序,你可以做的事情并不多 - 尽管为了避免为应用程序付钱而花费了大量的精力。
实施例的服务器代码:
URL:http://example.com/checkValid.php?udid=A1B2C3D4E5F6
$udid = mysql_real_escape_string($_GET['udid']);
$q = mysql_query("SELECT * FROM devices WHERE udid = `$udid`;");
if($r = mysql_fetch_assoc($q)){
$timeElapsed = time() - $r['firstLaunch'];
if($timeElapsed > 7*24*60*60){ // one week
echo "expired";
die();
}
}else{
$q = mysql_query("INSERT INTO devices (`udid`,`firstLaunch`) VALUES ('$udid','".time()."')");
}
echo "success";
然后,在你的应用程序,检查是否响应是expired
;如果是这样,告诉用户他们的试验已经结束。
有关App Store的政策稍微注意一下它实际上是对苹果的App Store指导创建一个应用程序,它是一个“试”一个一定的时间后过期。
显然苹果已经开始拒绝使用[[UIDevice sharedDevice] uniqueIdentifier]
的应用程序;请参阅MKStoreKit blog上从Karl开始的线程。
有代码可以获取mac地址here。您可以使用它来创建UDID。我已经读过苹果公司也会拒绝一个应用程序,如果它传递设备的实际MAC地址,那么你将不得不将它转换成一个UDID。该文章建议使用rfc4122规范。