J'envisage de modifier gratuitement mon application iOS
payée afin de la rendre ad based
et de disposer d'une option in-app purchase
pour supprimer les annonces.
Cela semble être une bonne idée si je venais de lancer l'application, mais nous avons plus de 30 000 téléchargements payants, et je ne veux pas que ces utilisateurs voient les annonces lorsqu'ils mettent à jour leur nouvelle version, qui est gratuite.
Ai-je des options ici?
Depuis iOS 7, cela peut être fait en utilisant une validation de réception appropriée. Sous iOS 7, vous pouvez obtenir un reçu pour l'application achetée. Une partie des données du reçu comprend des informations sur la version d'achat originale de l'application par l'utilisateur. Vous pouvez consulter cette version et, si celle-ci date d'avant la publication de votre mise à jour gratuitement avec IAP, vous pouvez choisir de donner à l'utilisateur toutes les fonctionnalités sans que l'utilisateur ait besoin de racheter la mise à niveau.
Bien sûr, si vous souhaitez que votre application mise à jour fonctionne sous iOS 6, ce n'est pas une option.
Reportez-vous au Guide de programmation de la validation du reçu pour plus de détails sur la validation du reçu.
Si votre application actuelle contient des données dans les valeurs par défaut de l'utilisateur ou dans le trousseau, cela peut être l'indicateur. Lorsque l'application est ouverte pour la première fois (dans votre nouvelle version), exécutez un morceau de code qui:
essayez de récupérer tous les reçus et de les analyser en utilisant les données suivantes:
"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. Obtenez tous les reçus de l'utilisateur sur l'App Store
+ (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. Chaque reçu contiendra un dictionnaire:
"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;