Хранение в приложении Покупка поступлений в приложении Beychain

StackOverflow https://stackoverflow.com/questions/4978852

Вопрос

Я никогда не реализовал в покупке приложений раньше, поэтому я использовал обертку MkStorekit и иметь рабочую реализацию. MKSTOREKIT удерживает все квитанции в пользовательских условиях .plist как bool, поэтому для пиратов очень просто распространять покупки в приложении в «треснувшем» состоянии. После того, как сделана первая покупка, пучок может быть распределен, а .plist можно воссоздать, чтобы включить разблокировки IAP.

Я хотел бы расширить MkStorekit для создания данных о покупке приложения в Keychain в iOS. Есть ли недостаток или возможная причина для этого, чтобы выплатить пользователей, быть ненадежным, или любую другую причину, по которой было бы общую неудачу, чтобы сделать это? Я понимаю, что пиратство неизбежно, и я определенно не хочу отчуждать уплачивать пользователей, но я чувствую, что userdefaults .plist слишком много способа обходить.

В моем сценарии простая строка будет помещена в брелок, когда сделана покупка. Таким образом, если бинарный распределяется, разблокировка еще не включена. Конечно, можно было бы придумать обходной путь, но это потребует немного больше усилий и знает, как найти истинный / ложный флаг и заставить его всегда возвращать правильное значение. Благодаря запутанию я мог даже сделать его немного сложнее отслеживать это вниз.

Спасибо за все свои идеи, и я ценю ответы, избегая обязательного неизбежного пиратства, сделки - это ответы. Я более заинтересован в технических возможностях этого решения.

Это было полезно?

Решение

Мы сделаем именно в нашем из наших приложений, и он работает Great.it's бесплатное приложение, которое вы можете обновить до полной версии, и мы храним индикатор обновления в брелок. Индикатор обновления - это произвольная строка, которую вы выбираете, но для целей брелок он рассматривается как пароль, то есть значение для Ksecvaluedata зашифровано в брете. Хороший бонус об этом подходе состоит в том, что если пользователь удаляет приложение, а затем позже повторно устанавливает его, все повторно включено, как магия, потому что элементы брелок хранятся отдельно от приложения. И это так мало дополнительной работы над хранением чего-либо в пользователей по умолчанию, которые мы решили, что это того стоит.

Вот как создать элемент безопасности:

NSMutableDictionary* dict = [NSMutableDictionary dictionary];

[dict setObject: (id) kSecClassGenericPassword  forKey: (id) kSecClass];
[dict setObject: kYourUpgradeStateKey           forKey: (id) kSecAttrService];
[dict setObject: kYourUpgradeStateValue         forKey: (id) kSecValueData];

SecItemAdd ((CFDictionaryRef) dict, NULL);
.

Вот как найти элемент безопасности, чтобы проверить его значение:

NSMutableDictionary* query = [NSMutableDictionary dictionary];

[query setObject: (id) kSecClassGenericPassword forKey: (id) kSecClass];
[query setObject: kYourUpgradeStateKey          forKey: (id) kSecAttrService];
[query setObject: (id) kCFBooleanTrue           forKey: (id) kSecReturnData];

NSData* upgradeItemData = nil;
SecItemCopyMatching ( (CFDictionaryRef) query, (CFTypeRef*) &upgradeItemData );
if ( !upgradeItemData )
{
    // Disable feature
}
else
{
    NSString* s = [[[NSString alloc] 
                        initWithData: upgradeItemData 
                            encoding: NSUTF8StringEncoding] autorelease];

    if ( [s isEqualToString: kYourUpgradeStateValue] )
    {
        // Enable feature
    }
}
.

Если UPGRADEITEMDATA - это ноль, то ключ не существует, чтобы вы могли предположить, что обновление не там или, то, что мы делаем, помещается в значение, которое означает не обновленное.

<Сильное> Обновление

Добавлено ksecreturndata (спасибо @luis для указания его)

Код на Github (дуговой вариант)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top