直接从Android手机上传图片到谷歌相册

时间:2017-09-21 16:01:16

标签: java android oauth-2.0 picasa google-photos

我一直在寻找谷歌照片的API,这将允许我在Android中创建一个应用程序,将我的照片推送到云中的特定相册。到目前为止,我已经看到了两种可能的解决方案:

1)google drive api - 我昨晚实际上开发了一个POC并且大部分都在工作,但不幸的是我无法指定一个谷歌相册来发送我的图像。

2)旧的picasa网络api - 这个看起来更有前景,但我无法通过验证我的凭据。这是一篇谷歌文章,描述了如何设置它,但PicasawebService对象上的setUserCredentials()方法不再起作用(https://developers.google.com/picasa-web/docs/3.0/developers_guide_java

我想继续追逐选项2,但我找不到PicasawebService对象的方法,这个方法允许我使用手机上登录的用户帐户进行后续通话(通过谷歌登录或AccountPicker意图)。我想也许setUserToken()方法可以工作,我尝试插入我从上述两种登录方法收到的令牌。我在我的OAuth2范围“oauth2:个人资料邮件https://picasaweb.google.com/data/”中请求这个,这确实提示我并询问我是否要访问我的照片,我只是无法弄清楚如何绑定登录用户帐户到PicasawebService电话。

如果我从登录到我的Google帐户的浏览器中点击此网址(此网址位于我上面链接的文章中),我会看到我希望看到的所有内容:https://picasaweb.google.com/data/feed/api/user/username?kind=album所以我知道api仍然可以正常运行,我只是无法弄清楚如何在我的Android应用程序中提升我的有效凭据。

任何建议都将不胜感激 TIA

2 个答案:

答案 0 :(得分:0)

我个人没有这样做,但看看这个人的回购。

https://github.com/tedyk/google-photos-android

希望能让你前进。

答案 1 :(得分:0)

我在2013-2014期间曾经有过这样的工作。但关于关闭picasa网络的讨论太多了,所以我从未将其投入生产。并非所有代码都只是您要求的身份验证...祝您好运。

//获取难以捉摸的令牌

if (TextUtils.isEmpty(token)) {
                String SCOPE = "oauth2:http://picasaweb.google.com/data/";
                try {
                    token = GoogleAuthUtil.getToken(context, email, SCOPE);
                } catch (UserRecoverableAuthException e) {
                    token = "";
                } catch (IOException e) {
                    token = "";
                } catch (GoogleAuthException e) {
                    token = "";
                }
                if (TextUtils.isEmpty(token)) {
                    return null;
                }
            }




// send back to picasa
            String urls = "https://picasaweb.google.com/data/entry/api/user/"
                    + userId + "/albumid/" + albumId;
            URL url = new URL(urls);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url
                    .openConnection();
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setDoInput(true);
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setUseCaches(false);
            // clientid may not be necessary is a crazy long string I think you get it from dashboard. it looks like blah.aps.googleusercontent.com
            httpURLConnection.setRequestProperty("X-GData-Client", CLIENT_ID);
            httpURLConnection.setRequestProperty("GData-Version", "2");
            httpURLConnection.setRequestProperty("Authorization", "OAuth "
                    + token);