2013-09-04 4 views
21

프리미엄 기능을 잠금 해제하기 위해 앱에서 인앱 결제를 구현하고 있습니다. 인앱 결제가 올바르게 설정되었습니다. '개발자 페이로드'를 제외하고는 모두 괜찮아 보입니다.Android 인앱 결제 v3 API에서 개발자 페이로드는 어떻게되어야합니까?

샘플 응용 프로그램은

/* 
    * TODO: verify that the developer payload of the purchase is correct. It will be 
    * the same one that you sent when initiating the purchase. 
    * 
    * WARNING: Locally generating a random string when starting a purchase and 
    * verifying it here might seem like a good approach, but this will fail in the 
    * case where the user purchases an item on one device and then uses your app on 
    * a different device, because on the other device you will not have access to the 
    * random string you originally generated. 
    * 
    * So a good developer payload has these characteristics: 
    * 
    * 1. If two different users purchase an item, the payload is different between them, 
    * so that one user's purchase can't be replayed to another user. 
    * 
    * 2. The payload must be such that you can verify it even when the app wasn't the 
    * one who initiated the purchase flow (so that items purchased by the user on 
    * one device work on other devices owned by the user). 
    * 
    * Using your own server to store and verify developer payloads across app 
    * installations is recommended. 
    */ 

이 샘플 응용 프로그램은 개발자 페이로드 빈 문자열을 사용했다. 내 질문은 개발자 페이로드로 사용할 문자열은 무엇입니까? 사용자의 기본 이메일 ID를 사용할 수 있습니까?

+3

다음 링크를 확인하십시오. http://stackoverflow.com/questions/17196562/token-that-identify-the-user/17205999#17205999. 나는 당신의 모든 질문을 해결할 수 있기를 바랍니다. – Maulik

+0

감사 Maulik.링크의 대답은 정말 당신이 당신의 질문을 닫아야 하나 또는 오른쪽 아래에있는 내 대답은 다른 사람이 자신의 필요에 대한 유용이 질문을 확인할 수 있도록 질문을 해결하기 위해 –

+0

을 도왔다. – Maulik

답변

1

답변을 아래에 확인하시기 바랍니다, 당신의 문제를 해결할 수 있습니다

당신은 소모품 (관리 항목)를 사용하는 경우 다음 당신이 사용할 수있는 임의 생성 된 문자열을

1 단계 : 이전에 메소드 선언을 만들 이 :

  private static final char[] symbols = new char[36]; 

       static { 
        for (int idx = 0; idx < 10; ++idx) 
         symbols[idx] = (char) ('0' + idx); 
        for (int idx = 10; idx < 36; ++idx) 
         symbols[idx] = (char) ('a' + idx - 10); 
       } 

2 단계 : 활동에서 설정 RandomString 및 SessionIdentifierGenerator 클래스

0 12,356,152,763,983,

3 단계 : 패스 페이로드 당신의 puchase 요청에 : Token that identify the user

이 문서가 문제를 해결하는 것입니다 희망이 링크를 확인 inforamation 이상

RandomString randomString = new RandomString(36); 
      System.out.println("RandomString>>>>" + randomString.nextString()); 
      /* String payload = ""; */ 
      // bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ 
      String payload = randomString.nextString(); 
      Log.e("Random generated Payload", ">>>>>" + payload); 

     Log.d(TAG, "Launching purchase flow for infinite gas subscription."); 
      mHelper.launchPurchaseFlow(this, SKU_GAS, 
        IabHelper.ITEM_TYPE_INAPP, RC_REQUEST, 
        mPurchaseFinishedListener, payload); 

.

+0

사용자 이메일을 사용하는 것이 좋습니다. – Defuera

+18

* 임의의 문자열을 사용하지 마십시오. 사용자는 한 기기에서 항목을 구입하여 다른 기기에 보관할 수 있습니다. 그 점은 그것은 당신이 당신의 구입을 취소하고 다시 구매하려고 할 때 또한 문제가 – defhlt

+1

퀘스트 (2 항목)에 설명되어 있습니다. Google Play는 매번 첫 번째 페이로드를 반환합니다. –

2

나에게있어서 임의 문자열은 첫째로 유용하지 않습니다. 구입 한 장치가 아니라 구입 한 사용자에 의존해야합니다. 둘째, 비 소모품이므로 빈 문자열이 적합 할 수 있지만 이상적이지는 않습니다.

내 방식은 키를 기반으로 암호화 된 해시를 만드는 것입니다. 구매할 때마다 해시가 동일하지 않아야하므로 고유하게 식별 할 수 있습니다 (이는 bcrypt와 같은 해싱 방법에 따라 다름).

키가 모든 기기에서 동일하기 때문에 해독하고 비밀 메시지가 올바른지 확인하는 것이 쉽습니다.

키를 비밀로 유지하기 위해 여러 가지 문자열 조작 함수를 사용하여 마스크를 사용하여 눈에 띄지 않게 저장했습니다.

텍스트 maniluation의 예는 여기 할 수있는 것으로 Android In App Billing: securing application public key

String Base64EncodedPublicKey key = DecrementEachletter("Bl4kgle") + GetMiddleBit() + ReverseString("D349824");

가 키에 기초하여 해시를 생성하는이 방법은 동시에, 페이로드를 고유 식별 할 수 있도록 합리적으로 안전합니다. 그것은 방탄이 아니지만 크랙을 어렵게 만듭니다.

+0

이 접근 방식으로 사용자를 어떻게 식별합니까? – Renjith

+0

@Renjith, 그렇지 않습니다. 이 방법은 구매가 합법적인지 여부를 확인하는 것입니다. –

+5

제발 이해가 안 돼요, 어떻게 동일한 입력에 대해 고유 한 페이로드가 될 수 있습니까? 열쇠는 항상 똑같습니다. 그리고 동일한 입력으로부터의 해쉬는 같은 결과를 반환합니다. – t0m