缓存版Instant App中读取App Link查询参数异常问题
Instant App缓存后丢失Intent Data的解决方案
统一Intent数据获取逻辑
缓存后的Instant App启动可能不会重新触发onCreate,而是复用已有实例走onNewIntent,因此不能只在onCreate中读取Intent。要在onNewIntent中更新并处理最新Intent:@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); // 更新当前Activity的Intent为最新请求 parseIntentParams(intent); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); parseIntentParams(getIntent()); } private void parseIntentParams(Intent intent) { if (intent != null && intent.getData() != null) { Uri launchUri = intent.getData(); // 解析所需参数 String location = launchUri.getQueryParameter("location"); String lnk = launchUri.getQueryParameter("lnk"); // 执行对应业务逻辑 } }调整Activity启动模式
检查Manifest中启动Activity的配置,避免singleInstance/singleTask导致新Intent被拦截。推荐使用singleTop模式,并开启状态保留:<activity android:name=".MainActivity" android:launchMode="singleTop" android:alwaysRetainTaskState="true"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="https" android:host="play.google.com" /> </intent-filter> </activity>强制触发新Intent识别
可以在启动链接中添加唯一标识参数(比如时间戳&ts=1699999999),让系统判定为新请求,避免复用缓存的旧Intent数据。排查系统日志
若问题仍存在,通过adb logcat | grep 你的包名查看Intent传递日志,确认系统是否将新链接的参数正确传递到App中。
内容的提问来源于stack exchange,提问作者Dante_Attano
相关产品推荐
相关产品推荐

