草庐IT

android - 在 Android webview 上自动登录 Google 帐户

coder 2023-11-21 原文

在过去的一周里,我用链接淹没了自己,让自己陷入了太多无法计数的圈子,所以我想我应该在这里提出这个问题。我有一个 Android 应用程序,它显示指向 url 的 webviews,用户必须使用他们的 Google 帐户登录才能看到(后端内置在 Google App Engine 中)。由于最终用户可能无论如何都会在他们的 Android 上登录他们的 Google 帐户,所以我希望登录过程是自动的。目前,在用户打开的第一个 webview 上,他们会看到 Google 登录表单和一个非常丑陋的后续页面,询问“您是否愿意允许 example.appspot.com 使用您的 Google 帐户?”

这个过程对用户体验来说是可怕的。我在这里和那里看到的关于自动登录的资源很少,但坦率地说,我迷失在几乎是我想要但不完全能够辨别我应该去的方向的海洋中.

我通读了Nick's有关使用 App Engine 对应用程序进行身份验证的教程,但仅拥有 token 并不能使我获得与后端每个 Google 帐户关联的唯一分配的用户 ID。最重要的是,以前的经验告诉我应用程序的 webview session 与应用程序的 HTTPClient session 不一致的困难方式。因此,即使我可以使用 Nick 的方法登录,也无法帮助我登录 webviews。

然后我遇到了this tutorial ,这实际上看起来很有前途,但到目前为止我还无法调整他的代码以适用于我自己的代码。

我还找到了this SO link这表明我需要做的就是将身份验证 token (我大概可以通过 Nick 的方法获得)传递到我作为 cookie 加载的每个 webview 中。

仅此而已。它们都是相当不同的方法,所以我想知道它们中的任何一个是否真的是我想要的。或者,如果某个地方确实存在一种相当简单的方法。如果有人知道这个问题的直接答案,我将不胜感激。谢谢!

最佳答案

出于安全原因WebViews无法访问手机的缓存、cookie 存储等,建议您使用新的 Chrome Custom Tabs可以自动登录您的用户。


关于“您愿意允许 example.appspot.com 使用您的 Google 帐户吗?”屏幕;这是标准 OAuth处理并要求用户登录并允许您的应用访问他们的帐户信息。

在您的“example.appspot.com”App Engine 应用程序中,如果您使用的 API 需要用户信息,例如 Google Calendar API,则需要您特别请求用户批准才能访问此信息。

一旦获得他们的批准,您就可以保存 access and refresh tokens代表他们进行 future 的 API 调用,而无需反复征得用户同意。您可以在 OAuth 2.0 Playground 中看到整个 Oauth 流程是如何工作的。 .

即使您自动让用户登录,他们仍然会看到批准页面,请求您的应用访问他们的信息。开发黑客技术以代表他们强制批准对用户信息的访问是一项重大的安全违规行为。


可以看看新的Firebase Authentication流以轻松管理用户在 App Engine 应用程序中的 Oauth 体验。

关于android - 在 Android webview 上自动登录 Google 帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586957/

有关android - 在 Android webview 上自动登录 Google 帐户的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  4. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  5. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  6. ruby - 在 ruby​​ 中使用自动创建插入数组 - 2

    我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?

  7. ruby - Google-api-ruby-client 翻译 API 示例 - 2

    很高兴看到google代码:google-api-ruby-client项目,因为这对我来说意味着Ruby人员可以使用GoogleAPI-s来完善代码。虽然我现在很困惑,因为给出的唯一示例使用Buzz,并且根据我的实验,Google翻译(v2)api的行为必须与google-api-ruby-client中的Buzz完全不同。.我对“Explorer”演示示例很感兴趣——但据我所知,它并不是一个探索器。它所做的只是调用一个Buzz服务,然后浏览它已经知道的关于Buzz服务的事情。对我来说,Explorer应该让您“发现”所公开的服务和方法/功能,而不一定已经知道它们。我很想听听使用这个

  8. ruby - 使用 Ruby 和 Mechanize 登录网站 - 2

    我需要从站点抓取数据,但它需要我先登录。我一直在使用hpricot成功地抓取其他网站,但我是使用mechanize的新手,我真的对如何使用它感到困惑。我看到这个例子经常被引用:require'rubygems'require'mechanize'a=Mechanize.newa.get('http://rubyforge.org/')do|page|#Clicktheloginlinklogin_page=a.click(page.link_with(:text=>/LogIn/))#Submittheloginformmy_page=login_page.form_with(:act

  9. 【自动驾驶环境感知项目】——基于Paddle3D的点云障碍物检测 - 2

    文章目录1.自动驾驶实战:基于Paddle3D的点云障碍物检测1.1环境信息1.2准备点云数据1.3安装Paddle3D1.4模型训练1.5模型评估1.6模型导出1.7模型部署效果附录show_lidar_pred_on_image.py1.自动驾驶实战:基于Paddle3D的点云障碍物检测项目地址——自动驾驶实战:基于Paddle3D的点云障碍物检测课程地址——自动驾驶感知系统揭秘1.1环境信息硬件信息CPU:2核AI加速卡:v100总显存:16GB总内存:16GB总硬盘:100GB环境配置Python:3.7.4框架信息框架版本:PaddlePaddle2.4.0(项目默认框架版本为2.3

  10. ruby - 如何从 URL 中删除 Google 跟踪参数 (UTM)? - 2

    我有一堆要清理的URL。它们都包含UTM参数,在这种情况下不是必需的,或者是有害的。示例:http://houseofbuttons.tumblr.com/post/22326009438?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+HouseOfButtons+%28House+of+Buttons%29所有可能的参数都以utm_开头。如何使用ruby​​脚本/结构轻松删除它们而不破坏其他潜在的“好”URL参数? 最佳答案 您可以将正则表达式应用于url以清

随机推荐