从浏览器获取重定向 URL - Android

Posted

技术标签:

【中文标题】从浏览器获取重定向 URL - Android【英文标题】:Get Redirected URL From Browser - Android 【发布时间】:2013-04-27 13:34:30 【问题描述】:

这是我的问题,我想从用户那里授权我的应用。 为此,api 为我提供了 OAuth 2.0 流程

我有一个链接“A”,其中包含我的应用密钥和重定向链接

例如。 http://www.apiprovider?api-key=MY_API_KEY&redirect=REDIRECT_LINK

链接A在浏览器中打开时询问用户的用户名和密码并授权我的应用程序,成功授权后用户被重定向到REDIRECT_LINK

REDIRECT_LINK 用我需要存储在变量中的密钥编码

例如。 https://www.twitter.com/some_profile?key=Asc545AS454dS44as

我不希望用户访问重定向链接,我只想获取网址然后关闭浏览器页面不应该打开。

我已使用此代码在浏览器中打开链接

Intent httpIntent = new Intent(Intent.ACTION_VIEW);
            httpIntent.setData(Uri.parse("LINK_A"));
            startActivity(httpIntent); 

【问题讨论】:

不要在浏览器中打开它,使用 WebView。或者,创建一个 HttpGet 并检索 Location-Redirect 标头。 我无法使用 HttpGet,因为重定向发生在用户输入有效的用户名和密码之后,并且必须向用户显示页面(链接 A)。它不能在后端发生。 好的!但是我如何跟踪重定向,我的意思是在获得重定向链接后关闭 webview 我认为webview和webclient中有一些方法可以拦截请求,让你不加载页面。 【参考方案1】:

如果您在 WebView 中打开页面,您的应用可以使用 shouldOverrideUrlLoading() 回调监听任何 URL 更改。

如果您更喜欢打开股票浏览器,您可以启动一项服务,该服务将定期轮询最新的 URL:

String lastDate = "0";
…
String newDate = Long.toString(Calendar.getInstance().getTimeInMillis());
Cursor cursor = context.getContentResolver().query(
    Browser.BOOKMARKS_URI,
    Browser.HISTORY_PROJECTION,
    Browser.BookmarkColumns.DATE + " IS NOT NULL AND " + Browser.BookmarkColumns.DATE + " > ?",
    lastDate,
    Browser.BookmarkColumns.DATE + " DESC");
if (cursor.moveToNext()) 
    String url = cursor.getString(Browser.HISTORY_PROJECTION_URL_INDEX);

cursor.close();

lastDate = newDate; // update the timestamp

当您发现url 与您的预期更改相匹配时,您可以切换到您的 Activity 并在您的应用上下文中继续。

您可以从最终用户的 POV 中关闭浏览器,但可能不礼貌。例如,想象一下,她打开了 5 个包含重要信息的标签,而这一切都被破坏了!

请注意,此方法 can be used 适用于 Chrome 浏览器,内容提供程序略有不同:content://com.android.chrome.browser/bookmarks

【讨论】:

以上是关于从浏览器获取重定向 URL - Android的主要内容,如果未能解决你的问题,请参考以下文章

从 url android 获取最终重定向的 url

发送重定向时强制浏览器从 URL 中删除#hash

Bixby:想重定向到网页浏览器的网址上的按钮点击

带有“ 307临时重定向”的Android VideoView播放URL

从输入URL到页面显示发生了什么

从 Android Webview 获取 POST 数据