4

Android 용 자바 애플리케이션에서 Google LVL 및 Google Inapp Billing API ver 3을 사용합니다. 물론 나는 구글이 제안한 구글 엑스트라와 IAP jar에서 LVL 라이브러리 프로젝트 (약간 수정)를 사용한다.Android LVL 및 InAppBilling : 구매할 현재 사용자 계정을 선택하는 방법

LVL 라이브러리 verifyLicense의 LicenseValidator는 UserID가 포함 된 ResponseData를 수신합니다. Google 문서에서는 구매에 사용 된 사용자의 Google 계정을 나타내는 고유 한 사용자 ID라고합니다. 그래서 나는 사용자가 동일한 Google 계정으로 로그인 한 모든 기기에서 동일한 문자열 (예 : "ANlOH < ...> ppA ==")을 사용한다고 가정하고 시험에서 확인했습니다.

그래서 여기에 제 iap 구매 보호 체계가 있습니다.


구매 앱이 사용자 ID를 내 서버로 전송하기 전에. 그것은 사용자 ID에서 암호화 된 페이로드를 생성하고 다시 보냅니다. 앱이 구매 요청을하고 그것에 페이로드를 넣습니다. 앱은 Google이 서명 한 영수증을받으며 동일한 영수증을 보유합니다. 앱이이 영수증을 현재 사용자 ID로 내 서버에 전송합니다. 서버는 서명 및 기타 검사를 수행하고 페이로드 및 보낸 사람의 사용자 ID를 비교하며 모든 항목이 정상이면 파일을 iap 항목으로 전송합니다. 사용자가이 또는 다른 장치에 응용 프로그램을 다시 설치 다른 시나리오에서

는 응용 프로그램은 InAppBilling에서 그에게 속한 영수증, 현재 사용자 ID로 내 서버로 전송 가져옵니다. 서버는 동일한 검사를 수행하고 모든 것이 정상이면 필요한 모든 파일을 앱으로 보냅니다.


이 방법은 다른 플랫폼에서도 잘 작동합니다. 하지만 최근 Android 앱에서 이상한 결함이 발생했습니다. 내 서버가 영수증 확인 문제를 기록하고 이상한 오류가 발생했습니다 : (영수증의 payload가 다른 사용자 ID를 보유하고 있음)에 속한 하나의 user-id가 올바르게 서명 된 영수증을 보낸 사용자 사용자를 발견했습니다. 조사를 시작했을 때 이상한 "해커 공격"메시지 중 하나가 내 테스트 장치 중 하나 인 반면 실제 사용자는 영수증의 주문 ID에 따라 속한 것으로 나타났습니다.

Android 4.4.2가 설치된이 테스트 기기에는 설정에 몇 가지 Google 계정이 추가되어 있습니다. 이전에 Google이 첫 번째 계정을 사용했음을 확신했습니다. 나는 그러한 로그 메시지를 보았다 :

InAppBillingUtils.getPreferredAccount: com.mypackage.appname: Account from first account - [jbC...FgH] 

그러나 지금 나는 LVL이 첫 번째 계정이 아니라 다른 계정을 사용한다는 것을 알게되었다. 나는 로그 캣에서 이러한 메시지를 참조하십시오

InAppBillingUtils.pickAccount: smpxg.mythdefdf: Account determined from library ownership - [boL...M5E] 

또한, 내 응용 프로그램 의 신선한 설치 후 InAppBilling가 하나 개의 계정에 대한 영수증을 반환하지만, LVL 다른의 사용자 ID를 준! 그러나이 행동은 안정적이지 않습니다. 예를 들어, LVL과 InAppBilling 모두 두 번째 계정이 기본 계정이고 예상대로 작동한다고 생각합니다.

두 라이브러리가 나란히 작동한다고 가정했지만 틀렸어. 분명히 앱이 현재 사용 ID "... ppA"와 함께 사용자 ID "... yUQ"에 속한 영수증을 서버에 보내면 구매 한 콘텐츠를 보내지 않습니다. 그리고 그는 맞습니다.

사용자가 구매에 사용한 현재 계정을 변경할 수 있다면 FAQ에서이 트릭을 추가했을 것입니다.그러나 설정에서 수동으로 선택하는 방법을 볼 수 없습니다. 또한, 시스템은 어떻게 든 무작위 방식으로 그것을 선택합니다! 일을 제대로 수행하는 유일한 방법은 사용자가 자신의 주 애플리케이션을 제외한 기기의 모든 계정을 삭제하도록 요청하는 것입니다.하지만 이는 나쁜 해결책입니다.

사용자가 하나의 계정에 로그인 한 상태에서 다른 계정으로 전환하면 구입 한 항목이 표시되지 않을 것으로 예상됩니다. 앱을 구매할 때와 마찬가지로 예측 가능한 행동입니다. 그러나 그는 현재 어떤 계정이 사용되고 있는지도 모릅니다!

AFAIK, InAppBilling 서비스에서 구매할 Google 사용자 ID를 가져올 방법이 없습니다. 비록 내가 할 수 있더라도 - 사용자 ID가 시스템에 의해 무작위로 바뀌면 때때로 귓속말 항목이 나타나고 사라진다. :)

Google은 보호를 위해 개발자 페이로드를 권고하지만 안정적이지는 않은 것으로 보입니다. 특정 계정을 식별하는 데 사용할 수있는 ID입니다.

그래서 제 질문은 다음과 같습니다

  1. 는 사람이 이상한 계정 전환을 경험 하는가?
  2. 어떤 계정이 최신 계정인지 어떻게 알 수 있습니까?
  3. LVL 및 InAppBilling 계정 선택을 동기화하는 방법이 있습니까? 해결 방법은 무엇입니까?

미리 감사드립니다.

+0

로그 및 인앱 구매에서 동일한 오류가 발생했습니다. 대화 상자가 팝업되지 않습니다. 어떤 대답있어? –

답변

0

나는 당신의 문제에 정확한 경험이를 havent, 그러나 이것은 In app billing 문서 장치가 두 개 이상의 계정이있는 경우

에 따르면

어느 정도 관련이있을 수, 구입이 만들어 질 것입니다 앱을 다운로드 한 계정 앱을 다운로드 한 계정이없는 경우 첫 번째 계정으로 구매가 이루어집니다. 사용자는 구매 대화 상자를 확장하여 구매중인 계정을 확인할 수 있습니다.

+1

거짓말. 또는 작동하는 방법이지만 Android에 오류가 있습니다. 수천 및 수천 개의 오류. – Tertium

+0

@ Tertium : 이러한 상황에 대한 해결책을 얻을 수 있습니까? –

+0

해결 방법 - 서버 측의 lvl id 캐시 및 ID euristics. – Tertium