iOS 用のアプリでコードを1回だけ実行する方法 (アプリケーションが削除されて再インストールされる場合でも)?
たとえば、すべての新規ユーザーにギフトを贈る必要があります。ただし、使用した場合は、アプリ内購入を使用して再度購入する必要があります。
キーチェーンにフラグを保存できます。これは、アプリが削除された後もデバイス上で持続します。同じアカウントの複数のデバイスを制御するために使用できるiCloudKey-Value設定を使用することもできます。
これは、キーチェーンに情報(この場合はユーザーが何かを購入したかどうか)を追加して元に戻す例です。
static NSString *kIAPKeyChainDescription = @"MyAppPurchaseKey";
static NSString *kPurchaseTag = @"YES";
+ (void)recordTransaction:(NSString *)productId
{
NSMutableDictionary* dict = [NSMutableDictionary dictionary];
NSData *tag = [kPurchaseTag dataUsingEncoding:NSUTF8StringEncoding];
[dict setObject: (id) kSecClassGenericPassword forKey: (id) kSecClass];
[dict setObject: kIAPKeyChainDescription forKey:(id) kSecAttrDescription];
[dict setObject: productId forKey: (id) kSecAttrService];
[dict setObject: tag forKey: (id) kSecValueData];
OSStatus result = SecItemAdd ((CFDictionaryRef) dict, NULL);
if (result != 0)
NSLog(@"SecItemAdd error code is %ld",result);
}
+ (BOOL)isPurchased:(NSString *)productId
{
NSMutableDictionary* query = [NSMutableDictionary dictionary];
[query setObject: (id) kSecClassGenericPassword forKey: (id) kSecClass];
[query setObject: productId forKey: (id) kSecAttrService];
[query setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData];
NSData* upgradeItemData = nil;
OSStatus result = SecItemCopyMatching ( (CFDictionaryRef) query, (CFTypeRef*) &upgradeItemData );
if (result != errSecSuccess && result != errSecItemNotFound){
NSLog(@"SecItemCopyMatching errcode is %ld",result);
return NO;
}
if ( !upgradeItemData || result == errSecItemNotFound)
{
return NO;
}
else
{
NSString* s = [[[NSString alloc]
initWithData: upgradeItemData
encoding: NSUTF8StringEncoding] autorelease];
[upgradeItemData release];
return [s boolValue];
}
}
そのためのWebサービスを作成する必要があります。他の方法は考えられません。デバイス トークンを保存します。