You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android端Uber Deeplink与通用URL触发应用白屏挂起问题求助

我在Android平台集成Uber Deeplink和通用URL时遇到了一个棘手的问题——调用后Uber应用会卡在白屏状态,按下返回键只能回到我的调用页面。下面是我尝试过的两种解决方案,以及关键的现象细节:

尝试过的两种实现方式

我基于Uber官方SDK构建了请求Deeplink,尝试了两种触发方式:直接调用SDK的execute()方法,以及通过ACTION_VIEW Intent跳转:

SessionConfiguration config = new SessionConfiguration.Builder()
    .setClientId(<client-id>)
    .setClientSecret(<client-secret>)
    .setServerToken(<server-token>)
    .build();
Location location = Singleton.getInstance(context).getOneTimeLocation().getLocation();
RideParameters rideParams = new RideParameters.Builder()
    .setPickupLocation(location.getLatitude(), location.getLongitude(), "Your", "Your")
    .setDropoffLocation(latitude, longitude, address, "")
    .build();
RideRequestDeeplink deeplink = new RideRequestDeeplink.Builder(context)
    .setSessionConfiguration(config)
    .setFallback(Deeplink.Fallback.MOBILE_WEB)
    .setRideParameters(rideParams)
    .build();
// 尝试过直接调用deeplink.execute()
try {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(deeplink.getUri());
    ((BaseActivity) context).startActivity(intent, null, false);
} catch (Exception e) {
}

说明:两种触发方式都导致Uber卡白屏,没有区别。

方法2:手动拼接通用URL

我也尝试了手动拼接Uber的通用Web URL,然后在浏览器中打开:

String baseUrl = "https://m.uber.com/ul/?action=setPickup&";
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(baseUrl);
stringBuilder.append("client_id=").append(<client-id>).append("&");
stringBuilder.append("pickup[latitude]=").append(location.getLatitude()).append("&");
stringBuilder.append("pickup[longitude]=").append(location.getLongitude()).append("&");
stringBuilder.append("dropoff[latitude]=").append(latitude).append("&");
stringBuilder.append("dropoff[longitude]=").append(longitude).append("&");
stringBuilder.append("dropoff[formatted_address]=").append(address);
// 在浏览器中打开该URL,结果同样卡白屏

关键现象细节

两种方法的结果一致,但方法2中发现了一个特殊的触发条件:

  • 当系统弹出“使用Chrome或Uber打开链接”的选择框时,选择仅此一次用Uber打开,就能正常加载请求数据;
  • 但如果选择始终用Uber打开后,后续所有调用都会导致Uber卡在白屏;
  • 此时如果按下Home键回到桌面,再从后台重新唤起Uber应用,它又能正常加载之前传入的请求数据。

针对性的排查建议

结合这个特殊现象,我整理了几个可能的排查方向:

  1. 调整Intent启动Flags
    Uber的任务栈可能因为启动模式异常导致无法正常初始化。尝试给Intent添加以下Flags,确保Uber能以正确的任务栈方式启动:
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(deeplink.getUri());
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
((BaseActivity) context).startActivity(intent, null, false);
  1. 检查URL参数编码
    方法2中手动拼接的dropoff[formatted_address]参数如果包含空格、特殊字符(比如中文、标点),没有做URL编码的话会导致Uber解析失败。建议对地址参数做编码处理:
stringBuilder.append("dropoff[formatted_address]=").append(URLEncoder.encode(address, "UTF-8"));
  1. 清理Uber应用缓存或更新版本
    这种白屏挂起的情况可能和Uber应用的缓存冲突有关,建议测试时先清除Uber的应用缓存,或者更新到最新版本再重试。

  2. 调整SDK的Fallback设置
    方法1中设置了Fallback.MOBILE_WEB,可以尝试移除这个设置,或者测试仅用原生Deeplink跳转的情况,排除Web fallback的干扰。

  3. 排查应用任务栈配置
    检查你的应用中启动跳转的Activity是否设置了特殊的启动模式(比如singleTask、singleInstance),这可能会干扰Uber应用的任务栈初始化,导致无法正常加载。

内容的提问来源于stack exchange,提问作者saurabh dhillon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:11:36