Chrome自定义标签页页面切换时获取加载URL的方法
Chrome自定义标签页无内嵌按钮获取加载链接的解决方案
核心思路:利用授权回调URL拦截
Chrome自定义标签页本身不支持直接监听所有URL加载,但在授权场景下,可通过配置专属回调Scheme/Host捕获授权完成后的跳转链接,这是无需内嵌按钮的合规方案。
具体实现步骤
注册回调Activity
在AndroidManifest.xml中添加能处理自定义回调URL的Activity配置:<activity android:name=".AuthCallbackActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <!-- 替换为你的专属回调Scheme,比如myapp://auth --> <data android:scheme="myapp" android:host="auth" /> </intent-filter> </activity>构造带回调地址的授权URL
向授权服务器发起请求时,将上述回调URL作为redirect_uri参数传入:String authUrl = "https://auth.example.com/authorize?client_id=你的客户端ID&redirect_uri=myapp://auth&response_type=code";在回调Activity中获取跳转链接
授权完成后,Chrome自定义标签页会跳转至回调Activity,此时可通过Intent拿到目标URL:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri data = getIntent().getData(); if (data != null) { // 此处获取到授权完成后的回调URL,包含授权码等关键信息 String authCode = data.getQueryParameter("code"); // 后续处理授权逻辑 } finish(); // 处理完成后关闭回调页面 }
辅助方案:用CustomTabsCallback监听导航状态
若需监听页面加载的关键节点(无需具体URL),可通过CustomTabsCallback的onNavigationEvent方法实现,仅作为回调URL方案的补充:
CustomTabsCallback callback = new CustomTabsCallback() { @Override public void onNavigationEvent(int navigationEvent, Bundle extras) { super.onNavigationEvent(navigationEvent, extras); switch (navigationEvent) { case CustomTabsCallback.NAVIGATION_STARTED: // 页面开始加载 break; case CustomTabsCallback.NAVIGATION_FINISHED: // 页面加载完成 break; } } }; // 绑定服务并启动自定义标签页 CustomTabsClient.bindCustomTabsService(context, "com.android.chrome", new CustomTabsServiceConnection() { @Override public void onCustomTabsServiceConnected(ComponentName name, CustomTabsClient client) { client.warmup(0L); CustomTabsSession session = client.newSession(callback); CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(session); builder.build().launchUrl(context, Uri.parse(authUrl)); } @Override public void onServiceDisconnected(ComponentName name) {} });
注意事项
- 回调URL的Scheme需为应用专属,避免与其他应用冲突;
- 需在授权服务器后台配置该回调URL为合法重定向地址;
CustomTabsCallback无法获取具体URL,仅能监听导航事件,核心逻辑仍依赖回调URL拦截。
内容的提问来源于stack exchange,提问作者Manthan Mahajan
相关产品推荐
相关产品推荐

