2014-06-06 3 views
2

내 애플리케이션에 인앱 구매 기능을 추가하고 제품의 사용 가능한 개수 (예 : 100 개의 동전)를 저장하는 권장 방법이 무엇인지 알고 싶습니다.기기에 인앱 상품 데이터 저장

루트 액세스 권한이있는 사용자가 할 수

  • 액세스/응용 프로그램 저장소 (그래서 그는 동전의 수를 변경할 수 있습니다) 암호화되지 않은 데이터를 조작 할 수 있습니다.
  • 이있는 암호화 된 (또는 난독 화) 데이터를 저장 한 다음 나중에 그가 훨씬 더 많은 동전

그래서 심지어 암호화를했을 때 그것은 상태를 다시 얻기 위해 교체, 속임수 상대적으로 쉽다. 내 퀘스트 위치는 다음과 같습니다 :

  • 내가 암호화 이상이어야합니까? (노력할만한 가치가 있습니까?)
  • 사용자가 이것을 남용하는 것이 일반적입니까?
  • 항목 수를 저장하는 더 좋은 방법은 무엇입니까?
  • 연습이란 무엇입니까?
+0

서버에 저장하는 것이 더 좋습니다. –

+0

사용자가 오프라인이되면 어떻게됩니까? 오프라인 모드를 허용하려면 로컬로 저장해야합니다. – kupsef

+0

이러한 데이터를 로컬에 저장하면 항상 루트 액세스에 취약합니다. –

답변

4

게임 세계 통화를 로컬에 저장하고 네트워크 연결없이 로컬 트랜잭션을 발생 시키지만 사용자가 인터넷에 다시 연결하면 서버가 구입 한 것으로 표시되는 것과 로컬 동전을 조정하십시오.

기본적으로 네트워크에 연결되어 있으면 구매 한 인앱 제품을 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과 조정하면 암호화는 해를 끼치 지 않지만 불필요한 것으로 간주됩니다. 아주 소수의 사람들 만이 실제로 앱을 이용하려고합니다. 대부분의 사용자는 뿌리를 내리지 않으며, 그러한 사용자의 경우 실제로 이러한 악용 사례를 없애는 방법에 대한 실마리가 없습니다. 여전히 걱정이된다면 예, 암호화하고 암호화하십시오. 그것은 대다수의 사용자를 정직하게 유지하기에 충분한 억지력이어야합니다.

+0

네, 여기가 좋은 곳 이군요. 나는 대다수의 사람들이 해킹하거나 인앱 해킹을 시도하지 않기 때문에 당신이 극소수의 사기꾼을 괴롭히지 않아야한다고 생각하지 않습니다. – Leonardo

0

오프라인에서도 암호를 사용하여 암호를 암호화하고 로컬로 저장하더라도 더 많은 노력을 기울인 사용자는 앱을 리버스 엔지니어링하여 암호를 해독 할 수있는 문자열을 찾을 수 있습니다. 앱을 난독 화하는 것은 해커가 더 열심히 일하도록 만들 뿐이지 만 불가능한 것은 아닙니다. 그렇지 않으면 해커가 전혀 존재하지 않습니다.

관련 문제