GDK身份验证mirror.accounts.insert.execute()

时间:2015-01-06 06:05:13

标签: google-oauth google-glass google-gdk

这是用于身份验证的测试代码并插入帐户:

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 ="540223414844-tqpuqtbv07klpuuk3q04qha0g88094uu@developer.gserviceaccount.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)

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

参数说明:

SERVICE_ACCOUNT_EMAIL:在开发者控制台中创建新客户端ID时生成。

SERVICE_ACCOUNT_PKCS12_FILE_PATH:在开发者控制台中创建新客户端ID时生成。

ACCOUNT_TYPE:我在提交申请时提供给谷歌。

userToken:我从提供给谷歌的身份验证网址获得。

accountName,authTokenType和authToken是任意String。

2.在我执行上述代码之前,我还需要做其他事吗?

3.我可以通过(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响应代码,但我从来没有在我的玻璃设备上获得账号类型等于&#34 ; com.eyenotes&#34;。有时它会以上述例外情况返回400。

有任何想法,请告诉我。我非常感谢。

1 个答案:

答案 0 :(得分:0)

userToken每次都可能不一样。我会在验证过程中将令牌发送到您的登录页面,而不是将其硬编码为String。

此外,错误显示您需要在以下代码中调用Mirror对象上的setApplicationName(String)

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

参阅第38行here