当前位置:首页>安卓APP>安卓黑科技:实现多平台商品详情页一键跳转APP

安卓黑科技:实现多平台商品详情页一键跳转APP

  • 2026-06-20 12:01:18
安卓黑科技:实现多平台商品详情页一键跳转APP

我们致力于探索、分享和推荐最新的实用技术栈、开源项目、框架和实用工具。每天都有新鲜的开源资讯等待你的发现!

大家好,我是常利兵,独立开发者,这是我的网站 https://make.dxmwl.com

一、开篇引入

在如今的移动互联网时代,电商购物和短视频娱乐已成为我们生活中不可或缺的一部分。你是否有过这样的体验:在浏览网页或者使用某些应用时,看到一款心仪的商品,比如在抖音上刷到的好物推荐,或是在浏览器中搜索到的京东、天猫商品,又或是在闲鱼上发现的二手宝贝,只需轻轻一点,就能从当前的商品详情页面瞬间跳转到对应的 APP,直接进入商品购买或详细查看的界面 ,整个过程一气呵成,无需繁琐地手动打开 APP 再去搜索商品。这种便捷的操作背后,正是 Android 实现商品详情页面智能跳转 APP 的技术在发挥作用。今天,就让我们一起来深入探索这一神奇功能是如何实现的,看看它背后隐藏着哪些技术奥秘。

二、跳转原理与技术

实现 Android 商品详情页面智能跳转 APP,主要依赖于以下几种关键的技术和机制。

(一)URL Scheme 协议

URL Scheme 是一种类似于网页 URL 的应用内跳转协议,它可以让我们通过一个特定格式的链接来启动对应的应用程序,并传递一些参数。与网页 URL 使用http://https://协议不同,URL Scheme 由应用自定义协议头 ,其一般格式为scheme://host:port/path?query\#fragment ,其中scheme是应用自定义的协议标识,就像是每个应用的专属 “电话号码” ,通过这个 “号码” 系统就能找到对应的应用 。例如,淘宝的 URL Scheme 协议头是taobao:// ,京东常用的是openapp\.jdmobile://openApp\.jdMobile:// ,拼多多是pinduoduo:// ,抖音则是snssdk1128:// 。

以淘宝商品详情页跳转为例,如果我们想跳转到商品 ID 为123456的商品详情页面,其对应的 URL Scheme 链接可能是taobao://detail\.tmall\.com/item\.htm?id=123456 。当用户点击这个链接时,系统会识别出taobao://这个协议头,然后尝试查找并启动淘宝 APP,并将后面的参数id=123456传递给淘宝 APP,APP 接收到参数后,就能根据这个 ID 展示对应的商品详情页面。

再看京东,京东的 URL Scheme 参数传递相对复杂一些,参数必须按照特定 JSON 格式传递 。假设要跳转到京东商品 ID 为654321的商品详情页,链接可能类似openapp\.jdmobile://virtual?params=\{\&\#34;action\&\#34;:\&\#34;toGoods\&\#34;,\&\#34;goodsId\&\#34;:\&\#34;654321\&\#34;\} 。这里通过params传递了一个 JSON 格式的参数,其中指定了要执行的动作actiontoGoods(跳转到商品页面)以及商品 ID goodsId 。

在实际使用 URL Scheme 实现跳转时,还需要考虑一些兼容性和异常处理的情况。比如,当用户未安装对应的 APP 时,直接使用 URL Scheme 链接会导致跳转失败,此时我们通常需要提供一个替代方案,如跳转到应用商店引导用户下载 APP ;不同手机系统和浏览器对 URL Scheme 的支持程度也可能不同,需要进行充分的测试和适配 。此外,由于安全原因,在一些封闭环境(如微信)中,直接使用 URL Scheme 跳转可能会受到限制,这时候就需要采用一些特殊的解决方案,比如使用微信 JS - SDK 或应用宝微链接等替代方案来实现跳转功能。

(二)Intent 与 Intent Filter

Intent 在 Android 中就像是一个 “信使”,它是对即将进行的一项操作的抽象描述 ,可以用于启动 Activity、Service,发送广播,以及在不同组件之间传递数据等 。在实现商品详情页面跳转 APP 的场景中,我们主要利用 Intent 来启动目标 APP 的商品详情 Activity 。

Intent Filter 则像是一个 “过滤器”,它在 AndroidManifest.xml 文件中声明,用于告诉系统当前组件(如 Activity)能够响应哪些类型的 Intent 。通过配置 Intent Filter,我们可以让应用响应特定的链接,从而实现跳转功能。

例如,我们在自己的应用中想要处理一个特定的 URL 链接来跳转到商品详情页面,就需要在对应的 Activity 的 AndroidManifest.xml 文件中添加如下的 Intent Filter 配置:

<activityandroid:name=".GoodsDetailActivity">
<intent-filter>
<actionandroid:name="android.intent.action.VIEW" />
<categoryandroid:name="android.intent.category.DEFAULT" />
<categoryandroid:name="android.intent.category.BROWSABLE" />
<data
android:scheme="your_custom_scheme"
android:host="your_host"
android:pathPrefix="/goods" />

</intent-filter>
</activity>

在这个配置中:

  • action指定为android\.intent\.action\.VIEW ,表示这个 Activity 可以显示指定 URI 的数据,也就是处理跳转操作 。

  • category包含android\.intent\.category\.DEFAULTandroid\.intent\.category\.BROWSABLE 。DEFAULT类别允许 Activity 接收不带特定 Category 的隐式 Intent ,这是系统默认行为,确保 Activity 能被发现;BROWSABLE类别允许 Activity 被 Web 浏览器调用,以显示链接,这样就可以从浏览器或其他应用中点击链接启动该 Activity 。

  • data标签用于指定要处理的 URL 格式 。这里android:scheme指定了自定义的协议头your\_custom\_scheme ,android:host指定了主机名your\_host ,android:pathPrefix指定了路径前缀/goods ,表示当接收到的链接符合your\_custom\_scheme://your\_host/goods这种格式时,该 Activity 就可以处理这个 Intent 。

在代码中,当我们获取到一个符合上述格式的链接时,就可以通过以下方式创建 Intent 并启动 Activity 来实现跳转:

String url = "your_custom_scheme://your_host/goods?id=123";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

首先,通过Intent\.ACTION\_VIEWUri\.parse\(url\)创建一个 Intent 对象,然后使用intent\.resolveActivity\(getPackageManager\(\)\)检查系统中是否有能够处理这个 Intent 的 Activity ,如果有则调用startActivity\(intent\)启动目标 Activity ,从而实现跳转到商品详情页面的功能。

(三)应用链接(App Link)

应用链接(App Link)是一种特殊的深层链接,它使用标准的 HTTP/HTTPS 链接,能够让用户在点击链接时无缝地跳转到对应的 APP,如果 APP 未安装,则会跳转到对应的网站页面 。应用链接的优势在于它提供了更加无缝的跳转体验,并且通过与网站的关联和验证机制,增强了安全性 。

实现应用链接,首先需要在项目中进行一系列的配置。在 AndroidManifest.xml 文件中,为处理应用链接的 Activity 添加 Intent Filter ,示例如下:

<activityandroid:name=".AppLinkGoodsDetailActivity">
<intent-filterandroid:autoVerify="true">
<actionandroid:name="android.intent.action.VIEW" />
<categoryandroid:name="android.intent.category.DEFAULT" />
<categoryandroid:name="android.intent.category.BROWSABLE" />
<data
android:scheme="https"
android:host="your_domain.com"
android:pathPrefix="/goods" />

</intent-filter>
</activity>

这里与普通 Intent Filter 配置的不同之处在于android:autoVerify=\&\#34;true\&\#34;属性,它表示应用链接需要进行自动验证 。

接下来,还需要在网站服务器上发布一个 Digital Asset Links JSON 文件,用于验证应用对指定域名的所有权 。这个文件的内容类似如下:

[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace""android_app",
"package_name""your_package_name",
"sha256_cert_fingerprints": ["your_sha256_fingerprint"]
    }
}]

其中,your\_package\_name是应用的包名,your\_sha256\_fingerprint是应用签名证书的 SHA - 256 指纹 。通过这种验证机制,确保只有拥有对应域名和签名的应用才能处理该应用链接,从而保证了安全性。

当用户点击一个符合配置的https://your\_domain\.com/goods?id=123这样的链接时,如果用户已经安装了应用,系统会直接启动应用并跳转到AppLinkGoodsDetailActivity展示商品详情;如果未安装应用,则会在浏览器中打开对应的网页 。这种方式不仅提升了用户体验,还能通过统一的链接管理,方便地将用户引导到应用内或网站上的对应内容,为应用的推广和用户留存提供了有力支持。

三、实现步骤详解

(一)获取目标 APP 的 URL Scheme

获取目标 APP 的 URL Scheme 是实现智能跳转的首要步骤,不同的 APP 其 URL Scheme 获取方式也有所不同,而且它们的 URL Scheme 在格式和参数设置上各具特点。

  • 天猫:天猫的 URL Scheme 一般以taobao://开头 ,若想获取天猫商品详情页的 URL Scheme ,可以通过以下几种方式。一是通过天猫开放平台的 API 文档,在文档中会明确给出不同业务场景下的 URL Scheme 格式及参数说明 ,比如商品详情页链接格式可能类似taobao://detail\.m\.tmall\.com/item\.htm?id=商品ID ,其中商品ID就是具体商品的唯一标识 。二是利用抓包工具,如 Charles 、Fiddler 等 。以 Charles 为例,在手机和电脑处于同一网络下,配置好手机代理指向电脑的 Charles 代理地址和端口 ,然后在手机上打开天猫 APP 并访问商品详情页面 ,Charles 就可以捕获到手机与服务器之间的网络请求,从中找到包含 URL Scheme 的请求,分析其链接结构即可得到对应的 URL Scheme 。天猫 URL Scheme 的特点是参数简洁明了,通过id参数就能精准定位到商品详情页 。

  • 京东:京东常用的 URL Scheme 协议头有openapp\.jdmobile://openApp\.jdMobile:// 。获取京东 URL Scheme 可以从京东开放平台查找相关文档,其中会有详细的跳转链接说明 ,例如跳转到商品详情页的链接可能是openapp\.jdmobile://virtual?params=\{\&\#34;action\&\#34;:\&\#34;toGoods\&\#34;,\&\#34;goodsId\&\#34;:\&\#34;商品ID\&\#34;\} ,这里通过params传递 JSON 格式参数,明确指定了跳转动作和商品 ID 。也可以在手机浏览器中打开京东商品页面,然后查看页面源代码,有时候能从中找到隐藏的 URL Scheme 链接 。京东 URL Scheme 的特点是采用 JSON 格式传递参数,这种方式可以传递更复杂的信息,如除了商品 ID,还能传递一些商品的额外信息或跳转的附加条件 。

  • 抖音:抖音的 URL Scheme 一般是snssdk1128:// 。获取抖音商品 URL Scheme,可通过抖音开放平台提供的接口文档,了解商品推广相关的 URL Scheme 格式 ,例如跳转到某个抖音商品详情页可能是snssdk1128://aweme/detail/?item\_id=商品ID 。此外,也可以通过抖音分享功能,将商品分享到其他应用(如微信、QQ) ,然后从分享的链接中提取 URL Scheme 。抖音 URL Scheme 特点在于与自身的内容生态紧密结合,item\_id不仅用于定位商品,还关联着抖音的视频内容、达人推荐等信息,方便用户从内容直接跳转到商品购买页面 。

  • 闲鱼:闲鱼的 URL Scheme 以fleamarket://开头 。获取方法可以是在闲鱼开放平台查找相关技术文档,获取商品详情页跳转的 URL Scheme 格式 ,例如fleamarket://item\.taobao\.com/item\.htm?id=商品ID 。也可以通过在闲鱼 APP 内分享商品链接,然后在其他应用中查看分享链接来获取 。闲鱼 URL Scheme 的特点是与淘宝生态有一定关联,因为闲鱼是阿里巴巴旗下的二手交易平台,部分 URL Scheme 格式和淘宝类似 ,并且在参数设置上会考虑到二手商品交易的特性,如可能会包含商品的成色、交易状态等相关参数(虽然在简单的商品详情跳转中不一定体现) 。

  • 拼多多:拼多多的 URL Scheme 一般是pinduoduo:// 。可以在拼多多开放平台的开发者文档中找到商品详情页跳转的 URL Scheme 说明 ,比如pinduoduo://goods详情页路径?goods\_id=商品ID 。也可以通过在拼多多 APP 内复制商品链接,然后分析链接结构获取 。拼多多 URL Scheme 的特点是在商品推广方面,会结合自身的团购、优惠活动等特色,在 URL Scheme 中可能会携带一些与活动相关的参数,如活动 ID 、优惠码等,以便用户跳转到商品页面时能直接参与相应活动 。

(二)在 Android 项目中配置跳转逻辑

在获取到目标 APP 的 URL Scheme 后,就需要在 Android 项目中进行配置,实现从当前应用跳转到目标 APP 的商品详情页面,这一过程主要包括以下几个关键步骤。

1. 检查 APP 是否安装

在尝试跳转到目标 APP 之前,首先要检查该 APP 是否已经安装在用户设备上 ,否则直接跳转将会失败 ,影响用户体验 。可以通过PackageManager来实现这一检查操作 ,以下是具体的代码示例:

privatebooleanisAppInstalled(String packageName){
try {
        getPackageManager().getPackageInfo(packageName, 0);
returntrue;
    } catch (PackageManager.NameNotFoundException e) {
returnfalse;
    }
}

在上述代码中,getPackageManager\(\)\.getPackageInfo\(packageName, 0\)方法尝试获取指定包名的应用程序信息 。如果应用程序已安装 ,则会返回PackageInfo对象 ,此时返回true ;如果应用程序未安装 ,则会抛出PackageManager\.NameNotFoundException异常 ,捕获异常后返回false 。

在实际使用时 ,假设要检查京东 APP 是否安装 ,可以这样调用:

String jdPackageName = "com.jingdong.app.mall";
if (isAppInstalled(jdPackageName)) {
// 京东APP已安装,进行后续跳转操作
else {
// 京东APP未安装,给出提示或引导用户下载
    Toast.makeText(this"京东APP未安装,是否前往下载?", Toast.LENGTH_SHORT).show();
// 这里可以添加跳转到应用商店下载京东APP的逻辑
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + jdPackageName));
if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

上述代码中 ,当检测到京东 APP 未安装时 ,通过Toast提示用户 ,并提供跳转到应用商店下载京东 APP 的功能 。Intent\.ACTION\_VIEWmarket://details?id=\&\#34; \+ jdPackageName构建的 Intent 用于打开应用商店并定位到京东 APP 的下载页面 ,intent\.resolveActivity\(getPackageManager\(\)\) \!= null用于检查系统中是否有能够处理该 Intent 的应用(即应用商店是否存在) ,如果存在则启动该 Intent ,引导用户下载 APP 。

2. 构建跳转 Intent

当确定目标 APP 已安装后 ,接下来就需要根据获取的 URL Scheme 构建Intent ,并传递商品详情链接等参数 ,以实现跳转到指定商品详情页的功能 。以下是构建跳转Intent的代码示例:

String urlScheme = "openapp.jdmobile://virtual?params={"action":"toGoods","goodsId":"654321"}";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlScheme));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
}

在这段代码中 ,首先定义了京东商品详情页的 URL Scheme ,然后通过Intent\.ACTION\_VIEWUri\.parse\(urlScheme\)创建了一个Intent对象 。Intent\.ACTION\_VIEW表示这个 Intent 用于显示指定 URI 的数据 ,在这里就是跳转到目标 APP 的商品详情页面 。Uri\.parse\(urlScheme\)将 URL Scheme 解析为Uri对象 ,作为Intent的数据部分 。

intent\.resolveActivity\(getPackageManager\(\)\) \!= null用于检查系统中是否有能够处理这个Intent的 Activity ,即是否有对应的 APP 可以响应这个跳转请求 。如果有 ,则调用startActivity\(intent\)启动目标 APP 并跳转到指定的商品详情页 。

3. 处理跳转结果

在跳转过程中 ,可能会出现各种异常情况 ,比如目标 APP 未正确响应跳转请求 、网络问题导致跳转失败等 。因此 ,需要对跳转结果进行处理 ,以便在出现问题时能及时给用户提供反馈并采取相应的后续操作 。以下是处理跳转结果的示例代码:

try {
    startActivity(intent);
catch (ActivityNotFoundException e) {
// 目标APP未安装或无法处理该Intent,给出提示
    Toast.makeText(this"跳转失败,请检查是否安装了目标APP或网络连接", Toast.LENGTH_SHORT).show();
catch (Exception e) {
// 其他异常情况,记录日志并给出提示
    Log.e("APP跳转""跳转过程中出现异常", e);
    Toast.makeText(this"跳转出现异常,请稍后重试", Toast.LENGTH_SHORT).show();
}

在上述代码中 ,使用try \- catch块捕获跳转过程中可能出现的异常 。当捕获到ActivityNotFoundException异常时 ,说明目标 APP 未安装或无法处理该 Intent ,此时通过Toast提示用户检查 APP 安装情况或网络连接 。当捕获到其他异常时 ,使用Log\.e记录异常日志 ,方便后续排查问题 ,同时通过Toast提示用户跳转出现异常 ,请稍后重试 。通过这样的处理 ,可以提高跳转功能的稳定性和用户体验 ,避免因异常情况导致用户不知所措 。

四、实战案例与代码示例

(一)一个完整的 Android 项目示例

为了更直观地理解如何在 Android 中实现商品详情页面智能跳转 APP,我们来看一个简单的电商展示 APP 示例。这个 APP 主要功能是在RecyclerView中展示商品列表,当用户点击某个商品时,能够跳转到对应的 APP 商品详情页 ,比如点击京东商品跳转到京东 APP 商品详情页,点击天猫商品跳转到天猫 APP 商品详情页等 。

首先,项目结构如下:

  • app/src/main/java/com/example/ecommerceapp

    • MainActivity\.java:主 Activity,负责加载RecyclerView并处理跳转逻辑 。

    • GoodsAdapter\.javaRecyclerView的适配器,用于绑定商品数据到列表项 。

    • Goods\.java:商品数据模型类,包含商品名称、图片资源 ID 、所属 APP(如 “京东”“天猫” 等)以及商品详情链接 。

    • JumpUtil\.java:跳转工具类,封装了跳转方法 。

  • app/src/main/res/layout

    • activity\_main\.xml:主 Activity 的布局文件,包含RecyclerView 。

    • item\_goods\.xmlRecyclerView中每个商品项的布局文件,包含商品图片和名称 。

activity\_main\.xml中,定义RecyclerView

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />

item\_goods\.xml中,定义商品项布局:

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="16dp">


<ImageView
android:id="@+id/goods_image"
android:layout_width="64dp"
android:layout_height="64dp" />


<TextView
android:id="@+id/goods_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="16dp"
android:textSize="18sp" />


</LinearLayout>

Goods\.java数据模型类:

publicclassGoods{
private String name;
privateint imageResId;
private String appName;
private String detailUrl;

publicGoods(String name, int imageResId, String appName, String detailUrl){
this.name = name;
this.imageResId = imageResId;
this.appName = appName;
this.detailUrl = detailUrl;
    }

// Getter 和 Setter 方法
public String getName(){
return name;
    }

publicvoidsetName(String name){
this.name = name;
    }

publicintgetImageResId(){
return imageResId;
    }

publicvoidsetImageResId(int imageResId){
this.imageResId = imageResId;
    }

public String getAppName(){
return appName;
    }

publicvoidsetAppName(String appName){
this.appName = appName;
    }

public String getDetailUrl(){
return detailUrl;
    }

publicvoidsetDetailUrl(String detailUrl){
this.detailUrl = detailUrl;
    }
}

MainActivity\.java中,初始化RecyclerView并设置适配器:

publicclassMainActivityextendsAppCompatActivity{

private RecyclerView recyclerView;
private GoodsAdapter adapter;
private List<Goods> goodsList = new ArrayList<>();

@Override
protectedvoidonCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

// 初始化商品数据
        initGoodsData();

        adapter = new GoodsAdapter(goodsList);
        recyclerView.setAdapter(adapter);
    }

privatevoidinitGoodsData(){
        goodsList.add(new Goods("华为手机", R.drawable.huawei_phone, "京东""openapp.jdmobile://virtual?params={\"action\":\"toGoods\",\"goodsId\":\"123456\"}"));
        goodsList.add(new Goods("小米电视", R.drawable.xiaomi_tv, "天猫""taobao://detail.tmall.com/item.htm?id=789012"));
// 可以继续添加更多商品数据
    }
}

GoodsAdapter\.java适配器:

publicclassGoodsAdapterextendsRecyclerView.Adapter<GoodsAdapter.ViewHolder{

private List<Goods> goodsList;

publicGoodsAdapter(List<Goods> goodsList){
this.goodsList = goodsList;
    }

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType){
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_goods, parent, false);
returnnew ViewHolder(view);
    }

@Override
publicvoidonBindViewHolder(@NonNull ViewHolder holder, int position){
        Goods goods = goodsList.get(position);
        holder.goodsName.setText(goods.getName());
        holder.goodsImage.setImageResource(goods.getImageResId());

        holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
publicvoidonClick(View v){
// 处理点击跳转
                JumpUtil.jumpToApp(v.getContext(), goods.getAppName(), goods.getDetailUrl());
            }
        });
    }

@Override
publicintgetItemCount(){
return goodsList.size();
    }

publicclassViewHolderextendsRecyclerView.ViewHolder{
        ImageView goodsImage;
        TextView goodsName;

publicViewHolder(@NonNull View itemView){
super(itemView);
            goodsImage = itemView.findViewById(R.id.goods_image);
            goodsName = itemView.findViewById(R.id.goods_name);
        }
    }
}

(二)关键代码解析

1. MainActivity 中的跳转逻辑

MainActivity中,虽然跳转逻辑主要在GoodsAdapter的点击事件中触发,但MainActivity负责初始化整个商品展示的流程 。在initGoodsData方法中,我们创建了商品数据列表 ,每个商品对象包含了商品名称、图片资源 ID 、所属 APP 名称以及商品详情链接 。这些数据将被传递给GoodsAdapter,用于展示在RecyclerView中 。

当用户点击RecyclerView中的某个商品项时,GoodsAdapter中的点击事件处理函数被触发:

holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
publicvoidonClick(View v){
// 处理点击跳转
        JumpUtil.jumpToApp(v.getContext(), goods.getAppName(), goods.getDetailUrl());
    }
});

这里,onClick方法获取了当前点击商品的上下文v\.getContext\(\) ,以及商品所属的 APP 名称goods\.getAppName\(\)和商品详情链接goods\.getDetailUrl\(\) ,然后调用JumpUtil\.jumpToApp方法来实现跳转 。这种将跳转逻辑封装到工具类中的方式,使得代码结构更加清晰,易于维护和扩展 。

2. 工具类中的跳转方法

JumpUtil\.java是一个封装了跳转方法的工具类,它的主要作用是根据不同的 APP 名称和链接生成正确的跳转Intent ,并处理一些跳转前的检查和异常情况 。以下是JumpUtil类的代码示例:

publicclassJumpUtil{

publicstaticvoidjumpToApp(Context context, String appName, String detailUrl){
if (TextUtils.isEmpty(appName) || TextUtils.isEmpty(detailUrl)) {
return;
        }

        PackageManager packageManager = context.getPackageManager();
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(detailUrl));

if ("京东".equals(appName)) {
            intent.setPackage("com.jingdong.app.mall");
        } elseif ("天猫".equals(appName)) {
            intent.setPackage("com.taobao.taobao");
        } elseif ("抖音".equals(appName)) {
            intent.setPackage("com.ss.android.ugc.aweme");
        } elseif ("闲鱼".equals(appName)) {
            intent.setPackage("com.taobao.idlefish");
        } elseif ("拼多多".equals(appName)) {
            intent.setPackage("com.xunmeng.pinduoduo");
        }

if (intent.resolveActivity(packageManager) != null) {
            context.startActivity(intent);
        } else {
            Toast.makeText(context, appName + "APP未安装,无法跳转", Toast.LENGTH_SHORT).show();
        }
    }
}

jumpToApp方法中:

  • 首先检查appNamedetailUrl是否为空 ,如果为空则直接返回,不进行后续操作 。

  • 获取PackageManager用于检查应用是否安装 。

  • 创建一个Intent对象,设置其动作为Intent\.ACTION\_VIEW ,并将商品详情链接解析为Uri作为数据传入 。

  • 根据appName判断目标 APP,然后设置对应的包名到Intent中 。这里通过简单的字符串匹配来确定 APP,实际应用中可以根据需求优化,比如使用枚举类型来管理 APP 名称和对应的包名映射关系 。

  • 使用intent\.resolveActivity\(packageManager\)检查系统中是否有能够处理这个Intent的 Activity ,即目标 APP 是否安装 。如果有,则调用context\.startActivity\(intent\)启动目标 APP 并跳转到商品详情页 ;如果没有安装,则通过Toast提示用户目标 APP 未安装,无法跳转 。通过这样的封装,在MainActivityGoodsAdapter中只需要简单调用JumpUtil\.jumpToApp方法,传入相关参数即可实现商品详情页面到对应 APP 的智能跳转 ,大大提高了代码的复用性和可维护性 。

五、注意事项与常见问题解决

(一)不同 Android 版本兼容性问题

在 Android 系统中,不同版本在跳转实现上可能存在一些差异 ,这是在开发过程中需要重点关注的兼容性问题 。例如,早期的 Android 版本对 URL Scheme 的支持相对有限,在处理一些复杂的 URL Scheme 格式时可能会出现解析错误 。部分低版本系统在使用 Intent 进行跳转时,对一些特殊的 Intent Flag 支持不足,可能导致跳转行为不符合预期 。

为了解决这些兼容性问题,我们可以采取以下措施 :

  • 版本检测与适配:在代码中通过Build\.VERSION\.SDK\_INT获取当前设备的 Android 版本号 ,然后根据不同版本进行相应的代码逻辑处理 。例如,对于 Android 4.4 及以下版本,在处理 URL Scheme 跳转时,可能需要对链接进行额外的转义处理,以确保其能被正确解析 。示例代码如下:
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
// 对URL Scheme进行特殊处理,如转义特殊字符
    String escapedUrl = Uri.encode(urlScheme, ":/?=&");
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(escapedUrl));
// 其他跳转逻辑
else {
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(urlScheme));
// 其他跳转逻辑
}
  • 使用兼容库:利用 Android Support Library 或 AndroidX 库中的相关组件 ,这些库通常会对不同版本的系统进行兼容性封装 ,提供统一的接口供开发者使用 ,减少版本差异带来的影响 。比如,在处理 Intent 跳转时,使用FragmentActivity(来自 Support Library 或 AndroidX)中的startActivity方法 ,它会在不同版本系统上进行兼容性处理 ,确保跳转操作能正常执行 。

  • 广泛测试:在开发过程中,使用多种不同 Android 版本的模拟器和真机进行全面测试 ,覆盖从低版本到高版本的各个主流系统版本 ,及时发现并修复兼容性问题 。可以利用云测试平台,如 Testin 云测、腾讯优测等 ,这些平台提供了大量不同型号和系统版本的设备,方便进行兼容性测试 ,提高测试效率和覆盖范围 。

(二)APP 未安装的处理

当目标 APP 未安装时 ,如果直接尝试跳转将会导致程序崩溃或给用户带来极差的体验 ,因此需要优雅地引导用户去应用商店下载 。以下是几种常见的处理方式和代码示例 :

1. 跳转到应用商店下载

使用Intent跳转到系统应用商店的对应 APP 下载页面是最常见的处理方式 。以跳转到京东 APP 下载页面为例,代码如下:

String jdPackageName = "com.jingdong.app.mall";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + jdPackageName));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
else {
// 如果系统没有找到处理该Intent的应用(即没有应用商店),给出其他提示
    Toast.makeText(this"无法找到应用商店,无法下载京东APP", Toast.LENGTH_SHORT).show();
}

在上述代码中 ,Intent\.ACTION\_VIEWmarket://details?id=\&\#34; \+ jdPackageName构建的 Intent 用于打开应用商店并定位到京东 APP 的下载页面 。intent\.resolveActivity\(getPackageManager\(\)\) \!= null用于检查系统中是否有能够处理该 Intent 的应用(即应用商店是否存在) ,如果存在则启动该 Intent ,引导用户下载 APP ;如果不存在,则通过Toast提示用户无法找到应用商店 。

2. 在页面内提示并提供下载链接

除了直接跳转到应用商店 ,还可以在当前应用页面内以弹窗或提示框的形式告知用户目标 APP 未安装 ,并提供应用商店的下载链接 ,让用户自主选择是否下载 。例如,使用AlertDialog弹出提示框:

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("提示")
       .setMessage("您尚未安装京东APP,是否前往下载?")
       .setPositiveButton("前往下载"new DialogInterface.OnClickListener() {
@Override
publicvoidonClick(DialogInterface dialog, int which){
                String jdPackageName = "com.jingdong.app.mall";
                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + jdPackageName));
if (intent.resolveActivity(getPackageManager()) != null) {
                    startActivity(intent);
                } else {
                    Toast.makeText(MainActivity.this"无法找到应用商店,无法下载京东APP", Toast.LENGTH_SHORT).show();
                }
            }
        })
       .setNegativeButton("取消"null)
       .show();

这样,用户在看到提示后可以根据自己的需求选择是否前往下载 ,提高了交互的灵活性 。

3. 采用第三方下载平台(可选)

在一些特殊情况下 ,如果系统应用商店不可用或者希望提供更多下载渠道 ,可以考虑使用第三方下载平台 ,如应用宝 、豌豆荚等 。以应用宝为例,跳转到应用宝下载京东 APP 的代码如下:

String jdPackageName = "com.jingdong.app.mall";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://android.myapp.com/myapp/detail.htm?apkName=" + jdPackageName));
if (intent.resolveActivity(getPackageManager()) != null) {
    startActivity(intent);
else {
    Toast.makeText(this"无法打开应用宝,无法下载京东APP", Toast.LENGTH_SHORT).show();
}

不过,使用第三方下载平台需要确保其合法性和安全性 ,并且要考虑到部分用户可能对第三方平台存在信任问题 。通过合理处理 APP 未安装的情况 ,可以提升用户体验 ,避免因跳转失败导致用户流失 ,让整个商品详情页面智能跳转 APP 的功能更加完善 。

(三)安全与隐私问题

在实现跳转过程中 ,保护用户隐私和数据安全至关重要 ,任何疏忽都可能导致用户信息泄露或遭受恶意攻击 ,给用户和应用开发者带来严重损失 。以下是需要重点关注的几个方面 :

  • 避免泄露用户信息:在构建跳转 Intent 和传递参数时 ,要严格避免将用户的敏感信息 ,如登录账号 、密码 、身份证号 、银行卡号等 ,通过 URL Scheme 或其他方式传递给目标 APP 。如果需要传递一些用户相关的非敏感信息 ,如用户 ID 、用户名等 ,也要确保这些信息在传输和接收过程中的安全性 。例如,在传递用户 ID 时,可以对其进行加密处理 ,防止被第三方窃取和篡改 。在代码实现上 ,可以使用加密算法(如 AES 、RSA 等)对敏感数据进行加密 ,然后在目标 APP 端进行解密 。

  • 防止恶意链接攻击:恶意攻击者可能会构造恶意的 URL Scheme 链接 ,当用户点击这些链接时 ,可能会导致应用崩溃 、获取用户设备权限 、下载恶意软件等安全问题 。为了防止此类攻击 ,需要对用户点击的链接进行严格的合法性校验 。可以使用正则表达式或白名单机制 ,验证链接的格式和来源是否合法 。例如,只允许来自官方渠道或可信来源的链接进行跳转 ,对于其他来源的链接进行拦截并提示用户 。同时,避免在应用中直接使用用户输入的内容来构建跳转链接 ,如果必须使用用户输入内容 ,要对其进行严格的过滤和转义处理 ,防止注入攻击 。

  • 权限管理与最小权限原则:在应用中实现跳转功能时 ,要合理管理应用所需的权限 ,遵循最小权限原则 。只申请和使用跳转功能所必需的权限 ,避免申请过多不必要的权限 ,减少因权限滥用导致的安全风险 。例如,如果跳转功能只需要访问网络和启动其他应用的权限 ,就不要申请读取用户联系人 、短信等敏感权限 。在 AndroidManifest.xml 文件中,仔细配置应用的权限声明 ,确保权限申请的合理性 。

  • 及时更新安全补丁:关注 Android 系统和相关依赖库的安全更新 ,及时更新应用所使用的 SDK 和库 ,修复已知的安全漏洞 。许多安全漏洞都是通过系统或库的更新来修复的 ,如果不及时更新 ,应用就可能面临被攻击的风险 。定期检查依赖库的版本 ,并按照官方文档进行更新 ,确保应用的安全性 。通过重视和落实这些安全与隐私保护措施 ,可以为用户提供一个安全可靠的跳转环境 ,增强用户对应用的信任 ,同时也保护了应用自身的声誉和利益 。

我的产品

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-29 11:42:38 HTTP/2.0 GET : https://c.mffb.com.cn/a/486631.html
  2. 运行时间 : 0.117589s [ 吞吐率:8.50req/s ] 内存消耗:4,458.56kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=be84c939448cf3ccc846dff04b6765bc
  1. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/runtime/temp/cefbf809ba1a84190cb04b0cb7abcf79.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/c.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000753s ] mysql:host=127.0.0.1;port=3306;dbname=c_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000949s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000364s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000330s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000556s ]
  6. SELECT * FROM `set` [ RunTime:0.000244s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000639s ]
  8. SELECT * FROM `article` WHERE `id` = 486631 LIMIT 1 [ RunTime:0.000605s ]
  9. UPDATE `article` SET `lasttime` = 1785296558 WHERE `id` = 486631 [ RunTime:0.001578s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000267s ]
  11. SELECT * FROM `article` WHERE `id` < 486631 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000444s ]
  12. SELECT * FROM `article` WHERE `id` > 486631 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.000453s ]
  13. SELECT * FROM `article` WHERE `id` < 486631 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.000669s ]
  14. SELECT * FROM `article` WHERE `id` < 486631 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.001467s ]
  15. SELECT * FROM `article` WHERE `id` < 486631 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003113s ]
0.120544s