2014-01-14 1 views
1

Google Play 인앱 구매로 Android 애플리케이션을 개발 중입니다. 백그라운드에서 작동하는 서버 응용 프로그램 (JAVA)도 있습니다. 사용자가 앱에서 성공적으로 구매할 때마다 (구매가 진행 중임) 서버 애플리케이션은 구매를 확인하기 위해 Google Play에 요청을 보내야합니다.Google androidpublish API access_token

Google Play는 그의 androidpublisher API를 제공하고있다 : 이 문제는 access_token은 입니다

을 developers.google.com/android-publisher/getting_started. Google 재생 스토어 (https://developers.google.com/android-publisher/v1/purchases/get)의 구매 인앱 항목에서 정보를 요청하기 위해 GET 메소드를 사용하려고하면 새 access_token (새로 고침 또는 새 토큰 요청 방법 사용)을 얻을 때마다 작동하지 않습니다. 항상 오류 401 (유효하지 않은 권한 정보) 또는 403 (액세스 구성되지 않음)이됩니다. https://developers.google.com/apis-explorer/#p/androidpublisher/v1.1/androidpublisher.inapppurchases.get, 나는 단지 거기에서 유효 access_token이 읽을 수 있으며, 해당 토큰 내가 일하는 내 서버 응용 프로그램을 얻을 수 있지만 : 나는 유일한 방법은 해당 링크 작업을 얻을 수 있다는 것을 발견하려고 끝없는 후

단 한 시간 동안 1 시간 후에 내가

가 지금은 정말 인터넷에서 많이 연구 한

내 응용 프로그램에 유효한 access_token이를 얻을 수있는 적절한 방법이 필요합니다 ... 다시 같은 단계를 수행해야하지만, 나는 유용한 것을 발견 할 수 없었다. 내가 그 문제를 가진 유일한 사람이 아니라는 것을 알고, 어쩌면 당신의 사람들 할 이미 당신은 com.google.api-clientgoogle-api-services-androidpublisher 라이브러리를 사용할 수

답변

1

에서 발생할 것을 알고있다. 새 클라이언트 만들기> -

  • 자격 증명에
  • 이동 "구글은 안드로이드 개발자 API 재생"사용> API를 -

    먼저 (https://console.developers.google.com)

    • API를 & 인증 구글 개발자 콘솔에서 프로젝트로 이동 ID
    • 서비스 계정 선택
    • 고객 ID 생성
    • p1을 저장하십시오. > 사용자는 & 권한 계정 - -이 파일은 안전한 곳에

    는 그런 다음 구글 플레이 개발자 콘솔에 서비스 계정 (https://play.google.com/apps/publish/)

    • 설정을 방금 생성 된 이메일 주소를 추가> 새 사용자를 초대
    • @developer.gserviceaccount.com 이메일 계정을
    • 선택 "보기 재무 보고서"
    • 보내기 초대
    • 붙여 넣기

    코드를 보자. pom에 다음 종속성을 추가하십시오.XML 파일 :

    <dependency> 
        <groupId>com.google.api-client</groupId> 
        <artifactId>google-api-client</artifactId> 
        <version>1.18.0-rc</version> 
    </dependency> 
    <dependency> 
        <groupId>com.google.http-client</groupId> 
        <artifactId>google-http-client-jackson2</artifactId> 
        <version>1.18.0-rc</version> 
    </dependency> 
    <dependency> 
        <groupId>com.google.apis</groupId> 
        <artifactId>google-api-services-androidpublisher</artifactId> 
        <version>v1.1-rev25-1.18.0-rc</version> 
    </dependency> 
    

    먼저 서명의 유효성을 검사 : 서명이 등록 정보를 가져올 확인하면

    byte[] decoded = BASE64DecoderStream.decode(KEY.getBytes()); 
    KeyFactory keyFactory = KeyFactory.getInstance("RSA"); 
    PublicKey publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(decoded)); 
    Signature sig = Signature.getInstance("SHA1withRSA"); 
    sig.initVerify(publicKey); 
    sig.update(signedData.getBytes()); 
    if (sig.verify(BASE64DecoderStream.decode(signature.getBytes()))) 
    { 
        // Valid 
    } 
    

    을 :

    // fetch signature details from google 
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
    JsonFactory jsonFactory = JacksonFactory.getDefaultInstance(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
        .setTransport(httpTransport) 
        .setJsonFactory(jsonFactory) 
        .setServiceAccountId(ACCOUNT_ID) 
        .setServiceAccountScopes(Collections.singleton("https://www.googleapis.com/auth/androidpublisher")) 
        .setServiceAccountPrivateKeyFromP12File(new File("key.p12")) 
        .build(); 
    
    AndroidPublisher pub = new AndroidPublisher.Builder(httpTransport, jsonFactory, credential) 
        .setApplicationName(APPLICATION_NAME) 
        .build(); 
    AndroidPublisher.Purchases.Get get = pub.purchases().get(
        APPLICATION_NAME, 
        PRODUCT_ID, 
        token); 
    SubscriptionPurchase subscription = get.execute(); 
    System.out.println(subscription.toPrettyString()); 
    

    이것은을 생성하여 모든 토큰 문제 처리됩니다 JWT 토큰이므로 직접 처리 할 필요가 없습니다.

  • +0

    정말 고맙습니다. 코드로 작업 해 주셔서 감사합니다. 위의 코드는 왜 위의 코드입니다. "서명"은 무엇을 의미하며 변수는 "KEY"입니까? 있어야하니? – user3193443