일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- net
- plcrashreporter
- API
- 한 번만 실행
- docker
- .net
- 기념일관리
- VS2008
- Font
- MFC
- C#
- 크래시로그
- M8200
- ClickOnce
- 블루투스 헤드셋
- GDI
- 설치제거
- Antialiasing
- PDA
- protobuf-c
- 자바스크립트
- self-signed ssl
- 와이브로
- EUC-KR
- 데이터 전달
- crashlog
- C/C++
- phpmailer
- JavaScript
- php
- Today
- Total
~☆~ 우하하!!~ 개발블로그
iOS App - InApp 영수증정보 검증 본문
아이폰 탈옥앱 중에 InApp Cracker 가 있다.
이 앱은 InApp 기능을 무력화시키는 기능의 앱이다.
InApp Cracker 를 무력화시키기 위해서는 InApp 구매영수증정보를 검증하는 기능을 추가해야 한다.
DevTongFramework 를 사용하여 InApp 구매영수증정보를 검증하는 방법은 다음과 같다.
우선 인앱 아이템 구매프로세스를 간단화시킨 InAppPurchaseManager 의 사용 방법을 알아본다.
AppDelegate.h 파일에 델리게이트 사용을 선언해둔다.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// InAppPurchaseManager
#import <DevTongFramework/DevTongInAppPurchaseManager.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// InAppPurchaseManager
, DevTongInAppPurchaseManagerDelegate
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
>
{
...
}
AppDelegate.m 파일에서 앱에서 사용하는 인앱아이템 항목을 등록하여 인앱아이템 정보를 요청한다.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// InAppPurchaseManager
[[DevTongInAppPurchaseManager sharedManager] setDelegate:self];
[[DevTongInAppPurchaseManager sharedManager] setUseVerifyReceipt:YES];
#ifdef _ADHOC
[DevTongInAppPurchaseManager sharedManager].sandbox = YES;
#endif
// Consumable, Non-Consumable Type
NSArray* arrayProductIds = [NSArray arrayWithObjects:@"InAppTestItem1", nil];
[[DevTongInAppPurchaseManager sharedManager] setArrayItemIds:arrayProductIds];
// Auto-Renewable Subscriptions, Free Subscription, Non-Renewing Subscription Type
NSArray* arraySubscriptionsIds = [NSArray arrayWithObjects:@"AutoRenewTestItem1", nil];
[[DevTongInAppPurchaseManager sharedManager] setArraySubscriptionsItemIds:arraySubscriptionsIds];
[[DevTongInAppPurchaseManager sharedManager] setSharedSecretKey:@"InHereYourSharedSecretKey"];
// request InApp Item Infos
[[DevTongInAppPurchaseManager sharedManager] loadItems];
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
인앱아이템의 정보가 수신되면 인앱아이템의 영수증정보를 DevTong 서버에서 내려받아야 한다. 인앱아이템 구매시 구매영수증정보가 DevTong 서버로 전송되어 저장되기 때문이다.
인앱구매영수증정보의 저장, 로드, 검증에 관련된 클래스는 DevTongPurchasedItemManager 이다.
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// PurchasedItemManager
#import <DevTongFramework/DevTongPurchasedItemManager.h>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// InAppPurchaseManager
#pragma mark DevTongInAppPurchaseManagerDelegate
- (void)didReceivedProductItems:(NSArray*)arrayItems
{
NSLog(@"didReceivedProductItems::arrayItems = [%@]", arrayItems);
for (NSDictionary* dicItem in arrayItems)
{
NSLog(@"dicItem = [%@]", dicItem);
// DevTongFramework v3.0.22 버전부터는 아래 함수 호출이 불필요해짐.
// DevTongFramework 내부에서 처리하도록 수정되었기 때문.
//[[DevTongPurchasedItemManager sharedManager] restorePurchasedItem:dicItem];
[[NSNotificationCenter defaultCenter] postNotificationName:kNotifyNeedsUpdateProductItemInfo object:nil userInfo:dicItem];
}
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
아래 코드는 InAppPurchaseManager 를 사용하여 인앱아이템 구매 프로세스를 진행하는 경우 구매완료시 해당 구매영수증정보를 DevTong 서버로 전송하는 코드이다.
#pragma mark DevTongInAppPurchaseManagerDelegate
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- (void)didCompletedPurchase:(NSDictionary*)dicItem
{
NSLog(@"didCompletedPurchase::purchased info = [%@]", dicItem);
[[DevTongPurchasedItemManager sharedManager] recordPurchasedItem:dicItem];
[[NSNotificationCenter defaultCenter] postNotificationName:kNotifyNeedsUpdateProductPurchaseInfo object:nil userInfo:dicItem];
}
- (void)didOccurredError
{
NSLog(@"didOccurredError");
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
인앱 아이템을 구매하는 코드는 다음과 같다. IAP_PRODUCTID 자리에 인앱아이템의 productid 를 넣어주면 된다.
[[DevTongInAppPurchaseManager sharedManager] buyItem:IAP_PRODUCTID];
이번에는 특정 인앱아이템이 해당 기기에서 구매되었는지 여부를 확인하는 코드를 살펴보자.
if (NO == [[DevTongPurchasedItemManager sharedManager] purchasedItem:IAP_PRODUCTID])
{
// 구매기록 없음.
}
인앱아이템 구매영수증정보가 검증에 실패한 경우이면 purchasedItem 함수의 리턴값은 NO 이다.
'iPhone & Cocoa' 카테고리의 다른 글
iOS App - 앱 사용기기에 대한 통계 확인 (0) | 2012.07.04 |
---|---|
iOS App - 공지사항 전달 (0) | 2012.07.04 |
iOS App - Push Message 전송하기 (APNS) (0) | 2012.07.04 |
iOS App - Crash Log 파일 전송하기 (0) | 2012.07.04 |
iOS App - Crash Log 작성하기 (0) | 2012.07.04 |