我正在考虑将我的付费iOS
应用程序更改为免费,使其成为免费的,ad based
并可以in-app purchase
选择删除广告。
如果我只是启动应用程序,这听起来是个好主意,但我们有超过 30k 的付费下载,我不希望这些用户在更新到免费的新版本时看到广告。
我在这里有什么选择吗?
我正在考虑将我的付费iOS
应用程序更改为免费,使其成为免费的,ad based
并可以in-app purchase
选择删除广告。
如果我只是启动应用程序,这听起来是个好主意,但我们有超过 30k 的付费下载,我不希望这些用户在更新到免费的新版本时看到广告。
我在这里有什么选择吗?
从 iOS 7 开始,这可以使用正确的收据验证来完成。在 iOS 7 下,您可以获得购买应用程序的收据。收据中的部分数据包括有关用户原始购买应用程序版本的信息。您可以查看该版本,如果它是在您发布更新之前通过 IAP 免费提供的,您可以选择为用户提供全部功能,而无需用户再次购买升级。
当然,如果您希望更新后的应用程序在 iOS 6 下运行,这不是一个选项。
有关收据验证的详细信息,请参阅收据验证编程指南。
尝试获取所有收据并通过以下数据分析它们:
"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;
如果您当前的应用程序在用户默认值或钥匙串中有任何数据,那么这可以作为指标。当应用程序首次打开时(在您的新版本中)运行一些代码:
在付费应用程序启动时提供免费的 inanpp 购买会更容易吗。一个按钮,上面写着“升级”。然后在下次更新时将免费的应用程序切换为付费?
在 iTunes Connect 中,您可以为应用内购买生成促销代码。您可以为高级功能创建 IAP 项目,并将其作为促销手动提供给购买者。虽然不是自动解决方案,但它可能会让您免于头痛。
唯一的选择是发布两个更新。第一个将向 NSUserDefaults 写入一个值,将他们标识为购买者。第二个更新是您的广告支持版本,它可以读取此购买者识别值并隐藏广告。
不是真的,不。您可以做的最好的事情是在它仍然是付费应用程序时发布更新,该应用程序将一些值写入 NSUserDefaults(或应用程序数据目录中的文件,无所谓),表明它已被购买。等待一周或您想要的多长时间,然后发布删除该代码的更新,时间安排在价格变为免费的同一天发布。