我正在考虑将我的付费iOS
应用更改为免费,将其设为ad based
,并使用in-app purchase
选项删除广告。
如果我刚推出应用程序,这听起来不错,但我们有超过3万的付费下载量,而且我不希望这些用户在更新到免费的新版本时看到广告。< / p>
我有什么选择吗?
答案 0 :(得分:65)
从iOS 7开始,可以使用正确的收据验证来完成。在iOS 7下,您可以获取已购买应用的收据。收据中的部分数据包括有关用户的原始购买应用版本的信息。您可以查看该版本,如果它是从更新发布之前到使用IAP免费,您可以选择为用户提供完整功能,而无需用户再次购买升级。
当然,如果您希望更新后的应用在iOS 6下运行,则无法选择。
有关收据验证的详细信息,请参阅Receipt Validation Programming Guide。
答案 1 :(得分:1)
如果您当前的应用程序包含用户默认值或钥匙串中的任何数据,则可以作为指标。首次打开应用程序时(在新版本中)运行一些代码:
答案 2 :(得分:0)
尝试获取所有收据并通过以下数据进行分析:
"expires_date" = "2017-09-24 11:25:19 Etc/GMT";
"original_purchase_date" = "2017-09-24 11:20:21 Etc/GMT";
"product_id" = "com.yourapp.service";
1。从应用商店获取所有用户的收据
+ (NSArray*)all_receipts{
// Load the receipt from the app bundle.
NSURL *receiptURL = [[NSBundle mainBundle]appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
if(!receipt){
//no receipts yet...
return nil;
}
NSError *error;
NSDictionary *requestContents = @{@"receipt-data": [receipt base64EncodedStringWithOptions:0],
@"password":YOUR_SECRED_SHARED};
NSData *requestData = [NSJSONSerialization dataWithJSONObject:requestContents
options:0
error:&error];
if (!requestData) {
return [NSArray array];
}
// Create a POST request with the receipt data.
//get current qa / production url
BOOL sandbox = [[receiptURL lastPathComponent]isEqualToString:@"sandboxReceipt"];
NSURL *storeURL = [NSURL URLWithString:@"https://buy.itunes.apple.com/verifyReceipt"];
if (sandbox) {
storeURL = [NSURL URLWithString:@"https://sandbox.itunes.apple.com/verifyReceipt"];
}
NSDictionary *jsonResponse = [LTServer postUrl:storeURL.absoluteString attach:requestContents];
NSLog(@"jsonResponse %@",jsonResponse);
if(!jsonResponse){
return [NSArray array];
}
NSArray *receipts_data = jsonResponse[@"latest_receipt_info"];
return [receipts_data mutableCopy];
}
2。每个收据将包含一个字典:
"expires_date" = "2017-09-24 11:25:19 Etc/GMT";
"expires_date_ms" = 1506252319000;
"expires_date_pst" = "2017-09-24 04:25:19 America/Los_Angeles";
"is_trial_period" = true;
"original_purchase_date" = "2017-09-24 11:20:21 Etc/GMT";
"original_purchase_date_ms" = 1506252021000;
"original_purchase_date_pst" = "2017-09-24 04:20:21 America/Los_Angeles";
"original_transaction_id" = 1000000339209266;
"product_id" = "com.yourapp.service";
"purchase_date" = "2017-09-24 11:20:19 Etc/GMT";
"purchase_date_ms" = 1506252419000;
"purchase_date_pst" = "2016-11-27 04:20:19 America/Los_Angeles";
quantity = 1;
"transaction_id" = 1000000337203266;
"web_order_line_item_id" = 1000000030161297;
答案 3 :(得分:-1)
Woudnt在付费应用上发布免费inanpp购买更容易。一个按钮说“升级”。然后在下次更新时切换免费的inapp付款?
答案 4 :(得分:-2)
唯一的选择是发布两个更新。第一个将为NSUserDefaults写一个值,将它们标识为购买者。第二个更新是您的广告支持版本,可以读取此购买者识别值并隐藏广告。
答案 5 :(得分:-2)
在itunes connect中,您可以为应用内购买生成促销代码。您可以为高级功能创建IAP项目,并将其作为促销手动提供给购买者。虽然不是一个自动解决方案,它可能会让您免于一些头痛。
答案 6 :(得分:-4)
不是,不。您可以做的最好的事情是发布更新,同时它仍然是一个付费应用程序,它将一些值写入NSUserDefaults(或应用程序数据目录中的文件,无关紧要),表明它已被购买。等待一周或多长时间,然后发布删除该代码的更新,定时在价格变为免费的同一天发布。