2015-01-06 2 views
0

이것은 계정 인증을위한 테스트 코드 삽입 :GDK 인증 mirror.accounts.insert.execute()

import java.io.IOException; 
import java.net.URISyntaxException; 
import java.security.GeneralSecurityException; 
import java.util.Arrays; 
import java.util.Collection; 
import java.util.List; 

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.client.http.HttpTransport; 
import com.google.api.client.http.javanet.NetHttpTransport; 
import com.google.api.client.json.jackson2.JacksonFactory; 
import com.google.api.client.util.Lists; 
import com.google.api.services.mirror.Mirror; 
import com.google.api.services.mirror.Mirror.Accounts.Insert; 
import com.google.api.services.mirror.model.Account; 
import com.google.api.services.mirror.model.AuthToken; 
public class InsertAccountWithJava { 
    private static final String SERVICE_ACCOUNT_EMAIL ="[email protected]account.com"; 
    private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH ="C:/Users/Yuan/Desktop/eyenotes-db176c40f51f.p12"; 
    private static final String ACCOUNT_TYPE = "com.eyenotes"; 
    private static final Collection<String> MIRROR_ACCOUNT_SCOPES =Arrays.asList("https://www.googleapis.com/auth/glass.thirdpartyauth"); 
    private static String userToken = "6164da1732ea09b4"; 
    private static String accountName="zhongmei"; 
    private static String authTokenType ="eyenotes"; 
    private static String authToken="myauthtoken"; 
    public static void main(String[] args) { 
     try { 
      Mirror mirror = getMirrorService(); 
      createAccount(mirror, userToken, accountName, authTokenType, authToken); 
     } catch (GeneralSecurityException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (URISyntaxException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static Mirror getMirrorService() throws GeneralSecurityException, IOException, URISyntaxException { 
     HttpTransport httpTransport = new NetHttpTransport(); 
     JacksonFactory jsonFactory = new JacksonFactory(); 
     GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(jsonFactory) 
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
      .setServiceAccountScopes(MIRROR_ACCOUNT_SCOPES) 
      .setServiceAccountPrivateKeyFromP12File(
       new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) 
      .build(); 
     Mirror service = new Mirror.Builder(httpTransport, jsonFactory, null) 
      .setHttpRequestInitializer(credential).build(); 
     return service; 
    } 

    public static void createAccount(Mirror mirror, String userToken, String accountName, 
     String authTokenType, String authToken) { 
     try { 
     Account account = new Account(); 
     List<AuthToken> authTokens = Lists.newArrayList(); 
     AuthToken authToken1 = new AuthToken().setType(authTokenType).setAuthToken(authToken); 
     authTokens.add(authToken1); 
     account.setAuthTokens(authTokens); 
     account.setPassword("zmyl123456"); 
     Insert insert = mirror.accounts().insert(userToken, ACCOUNT_TYPE, accountName, account); 
     insert.execute(); 
     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
} 

================== ========================================================================================================== ========

나는 예외 아래에 있어요 :

============================ ===================================

Fabruary 06, 2015 1:42:21 pm com.google.api.client.googleapis.services.AbstractGoogleClient <init> 
    warning: Application name is not set. Call Builder#setApplicationName. 
    com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request 
    { 
     "code" : 400, 
     "errors" : [ { 
     "domain" : "global", 
     "message" : "Invalid Value", 
     "reason" : "invalid" 
     }, { 
     "domain" : "global", 
     "message" : "Invalid Value", 
     "reason" : "invalid" 
     } ], 
     "message" : "Invalid Value" 
    } 
     at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 
     at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
     at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312) 
     at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) 
     at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460) 
     at com.ccfsz.service.InsertAccountWithJava.createAccount(InsertAccountWithJava.java:81) 
     at com.ccfsz.service.InsertAccountWithJava.main(InsertAccountWithJava.java:30) 

================================ =====================================

매개 변수 explaination :

SERVICE_ACCOUNT_EMAIL : 개발자 콘솔에서 새 클라이언트 ID를 생성 할 때 생성됩니다.

SERVICE_ACCOUNT_PKCS12_FILE_PATH : 개발자 콘솔에 새 클라이언트 ID를 생성 할 때 생성됩니다.

ACCOUNT_TYPE : 신청서 제출시 Google에 제공했습니다.

userToken : Google에 제공 한 인증 URL에서 가져 왔습니다.

accountName, authTokenType 및 authToken은 임의의 문자열입니다.

2. 위 코드를 실행하기 전에 다른 작업을 수행해야합니까?

3. 웹 응용 프로그램을 사용하여 Google 인증 페이지 (https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/glass.timeline+https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&access_type=offline&approval_prompt=force&include_granted_scopes=true&client_id=540223414844-jjhqevuu0rhmoa3u6gkd05g7v29i89kk.apps.googleusercontent.com&redirect_uri=http://www.eyenotes.com/glass/login.php)를 얻을 수 있습니다.이 페이지를 받아서 서비스 계정을 사용하여 권한을 얻을 수 있습니까?

4. 어떤 힌트를 줄 수 있습니까? 가끔 위의 테스트 코드를 실행 한 후에 나는 아무것도 얻지 못한다.이 경우, 소스 코드에 따르면, 이는 200에서 300 사이의 HTTP 응답 코드가 있다는 것을 의미하지만 accountType이 "com"인 글래스 장치에는 계정을 가져 오지 못한다. eyenotes ". 때때로 excepiton으로 400을 반환합니다.

누구 아이디어가 있으시면 알려주세요. 매우 감사드립니다.

답변

0

userToken은 매번 같지 않을 수 있습니다. 문자열로 하드 코딩하는 대신 인증 프로세스 중에 사용자의 로그인 페이지로 토큰을 보냅니다.

또한, 오류는 다음 코드에 거울 객체에 setApplicationName(String)를 호출 할 필요가 말한다 :

Mirror service = new Mirror.Builder(httpTransport, jsonFactory, null) 
     .setHttpRequestInitializer(credential).build(); 

38 here 라인을 참조하십시오.