我目前正在尝试在 android 中编写一个与 google 任务同步的任务管理器。该应用程序使用谷歌客户端 API 和 AccountManager 与谷歌服务器进行通信。它在android下工作。但是,我想在 Blackberry playbook 上的 android player 下运行它。虽然 .apk 文件转换为黑莓应用程序,但 AccountManager 似乎在 playbook android 播放器下不起作用,因为它没有绑定到谷歌帐户。我发现没有客户经理很难与谷歌服务器通信。我尝试手动将帐户添加到 AccountManager,但它也会引发安全异常。我很好奇是否有任何其他方式可以在给定用户名和密码(以及用于访问的 API 密钥)的情况下登录谷歌服务?谢谢
1 回答
AccountManager 和 Google Play 服务都允许您通过 OAuth 2.0 授权流程并在 Android 上获得本机体验(仅适用于 Google API),仅在 Google Experience 设备上可用。Blackberry Playbook 的 Android 模拟器可能不是 Google 体验环境。
因此,在这种情况下,最好的方法是使用 WebView 来实现 OAuth 2.0 流。这也是您需要用于非 Google API(Facebook、Microsoft、Salesforce、Dailymotion 等)的技术
基本上,您必须将您的新用户发送到 WebView 中的一个特殊 URL,Google(或其他 OAuth 2 提供商)会在其中要求他们授予您对请求的 API 的访问权限。然后,一旦 Google 身份验证服务器生成并返回身份验证代码,您就需要从 URL 或页面内容中提取身份验证代码。最后一步是将该身份验证代码交换为刷新和访问令牌。
您需要阅读并了解 OAuth 2.0 授权流程如何适用于已安装的应用程序:https ://developers.google.com/accounts/docs/OAuth2#installed
在 Android 上使用 WebView 执行 OAuth 2.0 的分步过程如下:
- 将用户重定向到嵌入式 WebView 中的授权屏幕 URL
- 用作
http://localhost
重定向 URI - 使用 onPageStarted 方法注册 WebViewClient 以拦截页面更改
- 通过检测重定向到
http://localhost
并从 WebView 的 URL 读取身份验证代码来检测成功/失败的授权 - 通过交换令牌的身份验证代码来完成 OAuth 2 流程,并将这些令牌保存在本地数据库中以供进一步使用
您可以在Onavo 的 GitHub 上找到执行此操作的开源示例。