Android App打开淘宝(店铺或商品)

目录

​准备工作

逻辑

具体实现


在官方淘宝开放平台查询打开淘宝APP文档,未果。各处查找资料,其中参考了《应用内打开京东、淘宝指定商品或店铺页面》;发现未安装淘宝app时在WebView中打开网页无法下载,其中参考了《三种方式让 Android WebView 支持文件下载》。在写下这边博文之前,始终觉得这种非官方打开方式存在一定隐患,比如官方需要参数发生改变导致我们Intent.setData()中的uri参数不满足官方要求,各位有更好的方式请评论处留言。

​准备工作

  • 店铺id或商品id
  • 淘宝app包名:com.taobao.taobao
  • 淘宝app展示店铺uri:taobao://shop.m.taobao.com/shop/shop_index.htm?shop_id=%1$s
  • 淘宝app展示商品uri:taobao://item.taobao.com/item.htm?id=%1$s
  • webView展示店铺uri:https://shop.m.taobao.com/shop/shop_index.htm?shop_id=%1$s
  • webView展示商品uri:https://item.taobao.com/item.htm?id=%1$

逻辑

  • 检测本地是否安装淘宝app
  • 安装则打开淘宝app,否则打开webView

具体实现

  1. 判断本地是否安装淘宝客户端
        /**
         * 检测该包名所对应的应用是否存在
         *
         * @param packageName
         * @return
         */
        private static boolean checkPackage(String packageName) {
            return new File("/data/data/" + packageName).exists();
        }

    其中packageName传入值为淘宝app包名(即com.taobao.taobao)

  2. 根据判断打开淘宝app或webView

        /**
         * @param activityOrFragment
         * @param taoBaoShopId       淘宝店铺id
         * @param taoBaoGoodsId      淘宝商品id
         * @param reqCode
         */
        private static void openTaobao(ComponentCallbacks activityOrFragment, String taoBaoShopId,
                                       String taoBaoGoodsId, int reqCode) {
            boolean shopEmpty = taoBaoShopId == null || TextUtil.isEmpty(taoBaoShopId);
            boolean goodsEmpty = taoBaoGoodsId == null && TextUtil.isEmpty(taoBaoGoodsId);
            if (shopEmpty && goodsEmpty) {
                return;
            }
            Context context = null;
            //获取Context
            if (activityOrFragment instanceof Activity) {
                context = (Activity) activityOrFragment;
            } else if (activityOrFragment instanceof Fragment) {
                context = ((Fragment) activityOrFragment).getContext();
            } else if (activityOrFragment instanceof android.app.Fragment) {
                context = ((android.app.Fragment) activityOrFragment).getActivity();
            }
            if (checkPackage2(MyApp.getContext().getString(R.string.taobao_package_name))) {
                //
                Intent intent = new Intent();
                intent.setAction(Intent.ACTION_VIEW);
                String uriString;
                if (taoBaoShopId != null && TextUtil.isEmpty(taoBaoShopId)) {
                    uriString = MyApp.getContext().getString(R.string.taobao_app_shop, taoBaoShopId);
                } else {
                    uriString = MyApp.getContext().getString(R.string.taobao_app_goods, taoBaoGoodsId);
                }
                Uri uri = Uri.parse(uriString);
                intent.setData(uri);
                if (context == null) {
                    return;
                }
                //跳转
                if (activityOrFragment instanceof Activity) {
                    ((Activity) activityOrFragment).startActivityForResult(intent, reqCode);
                } else if (activityOrFragment instanceof Fragment) {
                    ((Fragment) activityOrFragment).startActivityForResult(intent, reqCode);
                } else if (activityOrFragment instanceof android.app.Fragment) {
                    ((android.app.Fragment) activityOrFragment).startActivityForResult(intent, reqCode);
                }
            } else {
                String uriString;
                if (taoBaoShopId != null && TextUtil.isEmpty(taoBaoShopId)) {
                    uriString = MyApp.getContext().getString(R.string.taobao_web_shop, taoBaoShopId);
                } else {
                    uriString = MyApp.getContext().getString(R.string.taobao_web_goods, taoBaoGoodsId);
                }
                MallDetailActivity.startActivity(activityOrFragment, uriString, reqCode);
            }
        }
  3. 调用

        /**
         * 查看淘宝商铺
         *
         * @param activityOrFragment
         * @param taoBaoShopId
         * @param reqCode
         */
        public static void openShopInTaobao(ComponentCallbacks activityOrFragment,
                                            String taoBaoShopId, int reqCode) {
            openTaobao(activityOrFragment, taoBaoShopId, null, reqCode);
        }
    
        /**
         * 查看淘宝商品
         *
         * @param activityOrFragment
         * @param taoBaoGoodsId
         * @param reqCode
         */
        public static void openGoodsInTaobao(ComponentCallbacks activityOrFragment,
                                             String taoBaoGoodsId, int reqCode) {
            openTaobao(activityOrFragment, null, taoBaoGoodsId, reqCode);
        }
  4.  

    用到资源

    <string name="taobao_app_shop">taobao://shop.m.taobao.com/shop/shop_index.htm?shop_id=%1$s</string>
    <string name="taobao_app_goods">taobao://item.taobao.com/item.htm?id=%1$s</string>
    <string name="taobao_web_shop">https://shop.m.taobao.com/shop/shop_index.htm?shop_id=%1$s</string>
    <string name="taobao_web_goods">https://item.taobao.com/item.htm?id=%1$s</string>
    <string name="taobao_package_name">com.taobao.taobao</string>
    

     

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值