게임 세계 통화를 로컬에 저장하고 네트워크 연결없이 로컬 트랜잭션을 발생 시키지만 사용자가 인터넷에 다시 연결하면 서버가 구입 한 것으로 표시되는 것과 로컬 동전을 조정하십시오.
기본적으로 네트워크에 연결되어 있으면 구매 한 인앱 제품을 Google에서 다운로드하십시오. 재고를 확인한 다음 오프라인 상태에서 사용자가 수행 한 작업에 따라 제품을 줄여야합니다. 이렇게 한 후, 지역 총계와 서버가 보여준 것 (소비 후) 사이에 불일치가있는 경우 잠재적 인 해킹으로 표시합니다. 그렇지 않으면, 당신은 좋다 (모든 것이 균형을 이룬다).
이와 같이 소비가 가능한 인앱 제품을 사용하는 경우 (실제로 시도하는 것처럼 들릴 수 있음) 실제로 오프라인으로 할 수있는 방법은 없습니다. Google의 인앱 결제 서비스에 의존하고 있으므로 구입 한 인벤토리를 조정/새로 고침하기 위해 서버를 수시로 확인해야합니다. 구글의 in-app billing documentation가에서 :
구매 소비를 기록하려면 에 인앱 결제 서비스를 consumePurchase
방법을 보내고 제거 할 수있는 구매를 식별하는 purchaseToken
문자열 값 전달합니다. purchaseToken
은 성공적인 구매 요청 후 Google Play 서비스로 INAPP_PURCHASE_DATA
문자열로 반환 된 데이터 중 일부인 입니다. 이 예에서 은 토큰 변수에 인 purchaseToken으로 식별되는 제품의 소비를 기록합니다.
int response = mService.consumePurchase(3, getPackageName(), token);
경고 : 메인 스레드에서 consumePurchase
메소드를 호출하지 마십시오. 이 메서드를 호출하면 메인 스레드를 차단할 수있는 네트워크 요청이 트리거됩니다. 대신 별도의 스레드를 만들고 해당 스레드 내부에서 consumePurchase
메서드를 호출하십시오.
인앱 제품 이 사용자에게 제공되는 방식을 제어하고 추적하는 것은 귀하의 책임입니다. 예를 들어 사용자가 게임 내에서 통화를 구매 한 경우 통화로 구매 한 플레이어 인벤토리를 업데이트해야합니다.
오프라인 상태에서 인벤토리를 저장하고 관리하는 방법에 관해서는 위에서 언급 한 방법이 유용합니다. 합리적인 간격으로 Google과 조정하면 암호화는 해를 끼치 지 않지만 불필요한 것으로 간주됩니다. 아주 소수의 사람들 만이 실제로 앱을 이용하려고합니다. 대부분의 사용자는 뿌리를 내리지 않으며, 그러한 사용자의 경우 실제로 이러한 악용 사례를 없애는 방법에 대한 실마리가 없습니다. 여전히 걱정이된다면 예, 암호화하고 암호화하십시오. 그것은 대다수의 사용자를 정직하게 유지하기에 충분한 억지력이어야합니다.
서버에 저장하는 것이 더 좋습니다. –
사용자가 오프라인이되면 어떻게됩니까? 오프라인 모드를 허용하려면 로컬로 저장해야합니다. – kupsef
이러한 데이터를 로컬에 저장하면 항상 루트 액세스에 취약합니다. –