在嵌入式Android设备上使用Google OAuth 2

时间:2017-03-22 09:45:27

标签: android oauth oauth-2.0 google-oauth google-oauth2

我们有基于Android的嵌入式设备的应用程序,它使用WebView,在其中我们使用Google OAuth 2登录该应用程序。不幸的是Google will soon block OAuth 2 inside WebView,我们有很多限制:

  • 设备没有安装Google服务,因此可能没有'official' way of logging in可以使用(或者如果没有Google服务,它们中的任何一个都可以使用?)
  • 我们不能只是调用Android浏览器来登录,因为它显示地址栏,允许用户上网,我们不允许
  • 我们无法完全控制设备上安装的软件:无法安装Google服务,更新Android版本,安装Google Chrome等等,我们只需更新我们的应用即可。

我们还能做什么其他限制?

4 个答案:

答案 0 :(得分:2)

通过浏览器实施:

1)注册自定义URI方案(How to implement my very own URI scheme on Android),例如 app-oauth2://

2)在用户的浏览器中发出访问请求

https://accounts.google.com/o/oauth2/v2/auth?
scope=...
access_type=offline&
include_granted_scopes=true&
state=state_parameter_passthrough_value&
redirect_uri=http://example.com/oauth2-handler&
response_type=code&
client_id=...

3)如果用户在确认对话框中接受或拒绝了请求的权限,它将被重定向到带有一些参数的 redirect_uri http://example.com/oauth2-handler

4)在 redirect_uri处理程序http://example.com/oauth2-handler)一侧,使用params重定向到自定义URI方案:

  • 成功: app-oauth2:// ?state = state_parameter_passthrough_value& code = ...& scope = ...#
  • 失败: app-oauth2:// ?error = access_denied& state = state_parameter_passthrough_value#

5)在您的应用中,您可以从选项4解析URI方案 app-oauth2:// ,并接收用于将来使用的代码或错误以便向用户显示。

答案 1 :(得分:1)

根据您身边的问题,最好在应用程序中打开一个Intent,目标是登录Weburl [这不会触发地址栏链接]

请参阅此stackOverflow页面 how to open "Add a Google Account" activity using intent?

现在您可以使用共享偏好设置来存储身份验证数据,以便进一步登录[如果应用程序的要求允许的话。]

https://developer.android.com/reference/android/content/SharedPreferences.html

答案 2 :(得分:0)

您需要使用OAuth Web服务根据您的需求实施解决方案。

参考链接https://developers.google.com/+/web/api/rest/oauth

以下是使用OAuth 2 Web服务登录Twitter的示例github项目。您可以从中获取帮助,以便在Android应用中使用Google的OAuth2网络服务。

存储库链接:
https://github.com/sathify/tagpulse

网络服务消费屏幕链接: https://github.com/sathify/tagpulse/blob/master/android/src/tag/pulse/main.java

我希望这会有所帮助。

答案 3 :(得分:0)