标签: google-api-java-client

如何使用Google API Client Library for Java检索youtube缩略图

如果您能够让我知道使用Google API Client Library for Java检索youtube缩略图的方法,我将不胜感激,类似于我们使用gdata获取缩略图的方式.

List<String> thumbnails = new LinkedList<String>();
for (MediaThumbnail mediaThumbnail : mediaGroup.getThumbnails()) {
    thumbnails.add(mediaThumbnail.getUrl());
}
Run Code Online (Sandbox Code Playgroud)

期待,问候,Rony

java android google-api-java-client

5
推荐指数
1
解决办法
3380
查看次数

在Android上使用OAuth 2.0使用Google API的最佳方式

我正在尝试使用OAuth 1.0a将Android应用程序迁移到OAuth 2.0.(根据我的OAuth 2.0需要使用适用于Java/Android的Google API客户端库).

在Android平台上使用OAuth 2.0访问Google API的最佳/首选解决方案是什么,同时考虑了可用性方面.用户应该能够以简单的方式自动化访问,与我的Android应用程序无缝集成.

该应用程序当前正在使用OAuth 1.0基于Web的流程,我的应用程序弹出浏览器以允许用户授权访问,并且使用自定义重定向URI,我的应用程序能够检索访问令牌.它工作得很好,但我不喜欢这样的事实,我需要离开我的应用程序才能弹出一个浏览器来显示一个网页.我当时认为OAuth 2.0可以解决这个问题,并提供更好的用户体验.

我开始关注Google IO中概述Adroid AccountManager-OAuth2集成,因为它不涉及webbrowser,并且与Android更紧密地结合,但它根本不按预期的方式运行.它没有记录,也不清楚它是否仍然是未来可行的选择.

我现在开始研究标准的OAuth 2.0 Web流程.

在这里,我似乎有两个选择:

将OAuth 2.0客户端配置为已安装的应用程序,并使用urn:ietf:wg:oauth:2.0:oob重定向URI.

不是很干净的解决方案,因为我不会让我的用户将一些代码复制粘贴到我的应用程序中.这根本不是用户友好的.

使用OAuth 2.0访问谷歌的API文档提到,有投票的某种方式的页面解析出URL的冠军,但我也看到了很多与可用性问题,并没有真正想写这种管道代码.如果存在可以为我做的那个客户端库,我会很乐意进一步调查,但是现在,我已经放弃了这个选项.

将OAuth 2.0客户端配置为webapp,并使用重定向URI.

在这里,我注意到OAuth 2.0中禁止使用非标准方案.以前,可以使用类似xoauth://回调的东西,但不再允许这样做.在配置像http://mysite.com/oauth2/callback这样的重定向URI时,我无法在Google OAuth 2.0页面重定向时打开我的活动,尽管已为其设置了正确的意图过滤器.该http://mysite.com/oauth2/callback简单地显示在浏览器中.

以下工作正常

Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("http://mysite.com/oauth2/callback"));
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

但是,当Google OAuth 2页面重定向到同一个网址时,它只会显示在浏览器中.

即使这样可行,用户仍会看到一个选择器弹出窗口(在浏览器中打开或使用我的Android Activity打开).从可用性的角度来看,这也是不可接受的.

我正在寻找比这里概述的解决方案更好的解决方案.

此致,戴维

android oauth-2.0 google-api-java-client

5
推荐指数
1
解决办法
1万
查看次数

(JAVA)Google API分析 - 无法使用"刷新令牌"获取新的"访问令牌"

我想基于保存在数据库中的"刷新令牌"获取新的"访问令牌".

这是我写的代码:

GoogleCredential.Builder credentialBuilder = new GoogleCredential.Builder()
        .setTransport(HTTP_TRANSPORT).setJsonFactory(JSON_FACTORY)
        .setClientSecrets(CLIENT_ID, CLIENT_SECRET);
credentialBuilder.addRefreshListener(new MyCredentialRefreshListener());

credential = credentialBuilder.build();
credential.setRefreshToken("saved_refresh_token_from_database");

try {
    credential.refreshToken();
} catch (IOException e) {
    e.printStackTrace();
}


class MyCredentialRefreshListener implements CredentialRefreshListener {
    public void onTokenResponse(Credential cr, TokenResponse tr) {
       System.out.println("Credential was refreshed successfully.");
    }

    public void onTokenErrorResponse(Credential cr, TokenErrorResponse tr) {
        System.out.println(tr);
    }
 }
Run Code Online (Sandbox Code Playgroud)

我收到这条消息:

com.google.api.client.auth.oauth2.TokenResponseException:400 Bad

请求{"错误":"invalid_grant"}

我在php脚本中使用相同的CLIENT_ID,CLIENT_SECRET和"刷新令牌",当"访问令牌"到期时,我设法使用"刷新令牌"获取新的"访问令牌".

我根据javadoc.google-oauth-java-client编写了代码.

这里的任何人都知道如何修改代码以获取新的访问令牌?

提前致谢.

更新:问题是我在数据库中保存了refresh_token而没有对它执行json_decode,它包含一个"\",在JSON中被视为转义字符.

java access-token google-api-java-client

5
推荐指数
1
解决办法
1435
查看次数

使用 Google API Java 客户端库刷新令牌

我正在使用 Google API Java 客户端http://code.google.com/p/google-api-java-client/并且能够成功获取 Android 的访问令牌。

    // Google Accounts
credential = GoogleAccountCredential.usingOAuth2(this, CalendarScopes.CALENDAR);
SharedPreferences settings = getPreferences(Context.MODE_PRIVATE);
credential.setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
Run Code Online (Sandbox Code Playgroud)

由于我希望我的 Web 服务器进行离线 API 调用,因此我需要一个刷新令牌。我一直在广泛搜索,但还没有想出如何做到这一点。

理想情况下,我更喜欢在 WebView 上使用 Google API Java 客户端来获取刷新令牌(无需输入用户名或密码)。

任何帮助,将不胜感激!

google-api-java-client google-oauth google-oauth-java-client

5
推荐指数
2
解决办法
2910
查看次数

使用后台服务中的Android Drive API

有一个如何使用Drive API https://developers.google.com/drive/quickstart-android的示例.它运行良好,但我在尝试从后台服务实现上传文件到GDrive时遇到了一些麻烦.

在我发现的所有示例中,如果我们收到,UserRecoverableAuthException我们需要使用来自该Exception(UserRecoverableAuthException#getIntent())的Intent启动新的Activity,以将用户带到OAuth2权限页面.

当我们从Activity执行此操作时,我们只是使用startActivityForResult,结果我们可以使用onActivityResult知道用户完成了他的交互,我们可以重试.

但是,如果我想从Service使用Drive API,并且需要用户交互,我所能做的就是向PendingIntent的用户提供通知.当用户关闭OAuth2权限页面时,我无法回复任何回调.

你能建议任何方法吗?也许我想念一些东西?也许有一些我必须要播放的广播等等?

谢谢.

android google-api-java-client google-drive-api

5
推荐指数
1
解决办法
706
查看次数

如何使用JAVA库在Google API上获取用户个人资料?

我有一个Java ClientRequest到Google API,它返回一个json,其中包含一个基于access_token的配置文件.该网址为:
https://www.googleapis.com/oauth2/v1/userinfoaccess_token = ya29.1.AADtN_VALuuUTBm8ENfNTz8s ...

响应是:

{
    "id": "111223344556677889900",
    "email": "myemail@gmail.com",
    "verified_email": true,
    "name": "My Name",
    "given_name": "My",
    "family_name": "Name",
    "link": "plus.google.com/111223344556677889900",
    "picture": "photo.jpg",
    "gender": "male",
    "locale": "en"
}

一些要点:

1我想使用java库来避免挂载http请求,保留google服务器url和其他一些小问题.
2我不需要授权的步骤,因为此时我的方法接收访问令牌(所有的oauth步骤都在之前完成).
3在这种方法中,我们没有(并且到目前为止还不需要)客户端ID和秘密.
4我不需要Google+范围.其实我更喜欢不去那里.到目前为止,只找到了使用Plus库的示例.

总而言之,我需要google api java库中的某些内容完全等同于现在使用的http请求.

非常感谢你提前!

java google-app-engine google-api userinfo google-api-java-client

5
推荐指数
1
解决办法
6687
查看次数

通过 YouTube API 上传视频

我正在使用 YouTube API 以编程方式将视频上传到 YouTube。我的一些视频需要标记年龄限制,所以我想指定 AgeGating 视频属性。当指定 video.setAgeGating(gating) 时,还必须提供适当的部分名称,否则我会收到以下错误

{
  "code" : 400,
  "errors" : [ {
    "domain" : "youtube.part",
    "location" : "part",
    "locationType" : "parameter",
    "message" : "ageGating",
    "reason" : "unexpectedPart"
  } ],
  "message" : "ageGating"
}
Run Code Online (Sandbox Code Playgroud)

文件指出以下可用的部分:

片段、内容详细信息、文件详细信息、实时流媒体详细信息、播放器、处理详细信息、录制详细信息、统计信息、状态、建议和主题详细信息。

在我的情况下,它们都不起作用,仍然返回相同的unexpectedPart错误消息,因此我尝试了自定义ageGating部件名称,尽管这次响应是:

{
  "code" : 403,
  "errors" : [ {
    "domain" : "youtube.common",
    "message" : "Forbidden",
    "reason" : "forbidden"
  } ],
  "message" : "Forbidden"
}
Run Code Online (Sandbox Code Playgroud)

YouTube API 错误文档页面中未列出此错误类型。

这是我的代码示例:

Video videoMetadata = …
Run Code Online (Sandbox Code Playgroud)

youtube api video youtube-api google-api-java-client

5
推荐指数
1
解决办法
1668
查看次数

Gmail API 403权限不足域全局

            @Override
            protected List< String > doInBackground( Void... params ) 
            {
                try 
                {
                    //This line below is the cause of the insufficient permissions error
                    ListMessagesResponse messagesWithLabels = mService.users().messages().list("me").setQ("label:inbox").execute();

                    /*for( Message m : messagesWithLabels.getMessages( ) )
                    {
                        if( m.size( ) > MAXSIZE )
                        {
                            List<MessagePartHeader> headers = m.getPayload( ).getHeaders( );

                            for ( MessagePartHeader header : headers )
                            {
                                if ( header.getName( ).equals("From") || header.getName().equals("Date")
                                        || header.getName().equals("Subject") || header.getName().equals("To")
                                        || header.getName().equals("CC")) {
                                    messageDetails.put( header.getName( ).toLowerCase( ), header.getValue( ) );
                                }
                            }

                            messageDetails.put("snippet", m.getSnippet()); …
Run Code Online (Sandbox Code Playgroud)

android google-api-java-client google-oauth gmail-api

5
推荐指数
1
解决办法
1386
查看次数

Google Admin SDK 403 无权访问此资源/API

我在 java web 应用程序中使用以下代码来尝试获取组的所有用户:

GoogleCredential credential = GoogleCredential.fromStream(Util.class.getResourceAsStream("[credential_file].json")).createScoped(SCOPES);

Directory directory = new Directory.Builder(httpTransport, JSON_FACTORY, credential).build();

Directory.Members dirMem = directory.members();
Members members = dirMem.list("[group_email]").execute();
Run Code Online (Sandbox Code Playgroud)

这会导致最后一行 ( dirMem.list...)出现异常 403(未授权访问此资源/API )。

从文档(https://developers.google.com/admin-sdk/directory/v1/guides/delegation)和其他帖子中,我看到解决方案是使用setServiceAccountUser(). 但是,这意味着我必须使用 p12 文件而不是 json 文件(Google 建议在创建密钥时使用 json 文件)。

有什么办法可以在仍然使用 json 文件的同时解决这个问题(它还涉及更少的代码)。

谢谢。

google-api google-api-java-client google-oauth google-admin-sdk

5
推荐指数
1
解决办法
8057
查看次数

Google Play Android Developer API - 列出权利 - "权限不足"

在尝试列出权利时,我会:

 403 Forbidden                                                                                             

{
 "code" : 403,
 "errors" : [ {
 "domain" : "global",
 "message" : "Insufficient Permission",
 "reason" : "insufficientPermissions"
} ],
"message" : "Insufficient Permission"
}
Run Code Online (Sandbox Code Playgroud)

我正在使用client_secrets json的"WithInstalledApplication"授权.

重要提示:任何其他列表都正常工作(apks,inapproducts,...).我只有这个权利问题.

我也确定我的源代码是正确的,但仅供参考:

final AndroidPublisher service = AndroidPublisherHelper.init(appName, null);
final AndroidPublisher.Entitlements entitlements = service.entitlements();

EntitlementsListResponse entList = entitlements.list(pkgName).execute();
System.out.println("Entiltments: " + entList.toString());
Run Code Online (Sandbox Code Playgroud)

谢谢你的建议.

android google-api-java-client google-play-services google-play-console

5
推荐指数
1
解决办法
332
查看次数