2016-08-16 8 views
26

Android 앱에 문제가 있습니다. 월간 구독을 구현하려고합니다. IAP를 만들었습니다. 앱은 베타 버전이며 테스터로 등록합니다.Android App App Subscription은 항상 초기 영수증을 반환하며 갱신되지 않습니다.

구독을 구입할 때 예상대로 작동합니다. 테스터로 구입할 수 있는데 구독이 실제로 청구되지 않으며 매일 갱신됩니다.

하지만 여기 내 문제가 시작됩니다. 원래 영수증을 받으실 분은 원래 purchaseTimepurchaseToken입니다. 앱이 시작될 때마다 queryInventoryAsync으로 전화를 걸어 최신 갱신 영수증을 받으려고합니다. 그러나 나는 항상 영수증을받습니다.

내 생각이 잘못 되었나요? 새로운 orderID으로 갱신 영수증을 받아야하지 않습니까? (구글 문서가 말하길, orderIDGPA.blabla..0|1|2과 같이 받아야합니다. 캐싱 메커니즘이 있지만, 3 일을 기다렸다가 최신 주문을 받아야하지만, 원래 주문을 계속받습니다.

항상 횡단 보도와 함께 cordova를 사용하고 구입을 위해 다음 플러그인을 사용합니다 : https://github.com/j3k0/cordova-plugin-purchase. 중요한지는 모르겠지만 다른 모든 플러그인에서 사용하는 것과 동일한 IABHelper 클래스를 사용해서는 안됩니다. 자신의 코드에 뭔가 문제?

나는 mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken);로 호출하여받은 정확한 응답을 기록하며 왜 잘못된 데이터 (원본 영수증). 포함 :(

다른 사람이 비슷한 문제가 있습니까? 구독 테스트 중입니까? 실제로 구매할 때 작동합니까? 이미 실제 돈으로 테스트를 시작했지만 구독이 갱신 될 때까지 일주일이 걸릴 것입니다.

정말 고마워요.

편집 : Google Play 스토어 앱에서 캐시를 지우는 것은 옵션이 아닙니다. 내 사용자에게 그렇게하도록 요청할 수는 없습니다. 또한, 나는 이것을 테스트했지만 작동하지 않습니다!

편집 2 생산 구독 (리얼 머니, 테스트 없음) 중 하나가 작동하지 않습니다!. 원래 영수증을 받고 있습니다!

편집 3 아직이 문제를 해결하지 못했습니다. 갱신을 감지하는 올바른 방법은 무엇입니까? 방금 백엔드에서 cronjob을 실행하고 Google의 구매 상태 API에 대해 각 구독을 쿼리해야합니까?

편집 4 답변 해 주셔서 감사합니다. 구독을 갱신했는지 여부를 결정하기 위해 이미 백엔드에서 구매 상태 API를 사용하고 있습니다. 하지만 좀 싫어, 내가 100.000 구독하면 어떻게 될까? 그들 모두를 통과하고 Google의 API를 쿼리하는 스크립트는 매우 오래 걸릴 것입니다. 스크립트는 매일 실행해야합니다!

하지만 분명히 알 수 있습니다.

공식 문서가 구형임을 의미합니까?.

스타일 갱신을 무효로합니다?

편집 2016년 12월 5일 업데이트 : 지금 몇 달 생산에 구독을 실행하고 있었고, 난 여전히 ..1, ..0와 갱신을하지 않습니다. 내가 한 것은 매일 실행되는 cronjob을 설정하는 것입니다. 내 활성 구독을 거치고 Google의 구매 API에 대해 쿼리합니다. API가 내 데이터베이스에 저장된 것과 다른 만료일을 반환하면 가입이 갱신되었음을 의미합니다.

편집 2017년 7월 6일 업데이트 나는 아직도 모든 구독을 분석하고, 구매의 API https://developers.google.com/android-publisher/api-ref/purchases/subscriptions를 사용하여 Google을 조회하여 자신의 상태를 업데이트 내 일상 스크립트에 의존 . 지금까지 큰 성과를 올리고 있습니다.

빠른 팁 : 구독을 일괄 적으로 쿼리하십시오! 몇 가지 테스트를했는데 동일한 요청으로 최대 1,000 개의 구독을 번들로 제공 할 수있었습니다. 한계는 API의 최대 응답 크기에 의해 결정됩니다.

+0

기기 설정> 애플리케이션에서 Google Play 앱 캐시를 비우고 테스트해볼 수 있습니까? – random

+1

답장을 보내 주셔서 감사합니다. 그러나 사용자들에게 그렇게하도록 요청할 수는 없습니다. 나는 아무 결과없이 나 자신을 위해 그것을 테스트했다. – tehmaestro

+0

'getPurchases'의 결과로'getStringArrayList ("INAPP_PURCHASE_DATA_LIST")'를 호출하고 있습니까? 배열에 단 하나의 항목이 있습니까? –

답변

0

Google Play의 원본 영수증은 Google Play API에 구독 정보를 쿼리하는 데 사용하는 영수증입니다. Apple의 IAP는 매우 유사하게 작동합니다. 이러한 인앱 구매 메커니즘의 경우 영수증의 subscriptionId를 사용하여 Google/Apple의 API를 쿼리하여 구독 유효 기간을 결정합니다.

이러한 인앱 구매 메커니즘은 사기 방지 및 사용자가 앱의 개입없이 구독 정보를 변경할 수 있기 때문에 이와 같이 작동합니다.

GET /{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token} 
     Checks whether a user's subscription purchase is valid and returns its expiry time. 

인 - 앱 구매 확인을위한 일반적인 흐름은 다음과 같습니다 : 대한 구글/애플

  • 쿼리와

    • 검증 영수증

      은 당신이 관심을해야하는 API입니다 구독 식별자에 따라 Google/Apple에서 데이터를 구입하십시오.

    Apple/Google 원격 API에서 반환 한 데이터 만 기기에서 수신 한 데이터를 신뢰할 수 없습니다.

    이 주제에 대한 다른 StackOverflow의 토론 : Android : inApp purchase receipt validation google play

  • 0
    당신은 구입하면 앱 구매에 가입 자동을 받고으로 가입 토큰 이리저리 구글 플레이의 API를 조회 할 수있는 토큰 초기 payment.From의 구매 토큰을 얻을 것이다

    renewed.So Google Play의 API를 요청하는 것이 앱에서 구독 상태를 얻는 유일한 방법입니다.