热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

阿里百川电商SDK(3.1)接入与使用

Blog:reezy.me2016-12-20…简书:www.jianshu.compe8d1fad84…接入接入准备参考baichuan.taobao.comdocsdoc.ht

Blog: reezy.me/2016-12-20/…
简书: www.jianshu.com/p/e8d1fad84…

接入

接入准备

参考
baichuan.taobao.com/docs/doc.ht…

  1. 申请百川无线应用
  2. 下载安全图片
  3. 开通业务产品的使用权限
  4. 使用优惠券组件

添加安全图片

将安全图片放在/res/drawable目录下,如果已经有安全图片,就替换。

Gradle配置

repositories { maven { url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" }
}
dependencies {// 授权登陆 (MemberSDK)compile 'com.ali.auth.sdk:alibabauth_core:1.2.4@jar'compile 'com.ali.auth.sdk:alibabauth_ui:1.2.4@aar'compile 'com.ali.auth.sdk:alibabauth_ext:1.2.4@jar'// fastjsoncompile 'com.alibaba:fastjson:1.2.9'// 基础电商组件(AlibcTradeSDK, AlibcTrade, AlibcLogin)// 包含打开detail,淘客分润,jsbridge注入等功能compile 'com.alibaba.sdk.android:alibc_trade_sdk:3.1.1.20@aar'// 集成支付宝(可选)compile 'com.alibaba.alipay:alipaySingle:20160825@jar'// 组件可用性统计compile 'com.alibaba.mtl:app-monitor-sdk:2.5.1_for_bc'// 基础安全组件compile 'com.taobao.android:securityguardaar3:5.1.96@aar'// 网关compile 'com.taobao.android:mtopsdk_allinone_open:1.3.0@jar'// 手机淘宝与三方app之间的往返跳转compile 'com.taobao.android:alibc_applink:2.0.0.9@jar'// deviceID,主要用于计算设备的uttid, 设备唯一标识compile 'com.taobao.android:utdid4all:1.1.5'
}

Proguard 规则

-keepattributes Signature
-keep class sun.misc.Unsafe { ; }
-keep class com.taobao.* {*;}
-keep class com.alibaba.** {*;}
-keep class com.alipay.** {*;}
-dontwarn com.taobao.**
-dontwarn com.alibaba.**
-dontwarn com.alipay.**
-keep class com.ut.** {*;}
-dontwarn com.ut.**
-keep class com.ta.** {*;}
-dontwarn com.ta.**
-keep class org.json.** {*;}
-keep class com.ali.auth.** {*;}

使用电商SDK(3.1)

初始化

在应用的入口方法(比如Application的onCreate)中初始化百川SDK

AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() {@Overridepublic void onSuccess() {// 初始化成功,设置相关的全局配置参数// 是否使用支付宝AlibcTradeSDK.setShouldUseAlipay(true);// 设置是否使用同步淘客打点AlibcTradeSDK.setSyncForTaoke(true);// 是否走强制H5的逻辑,为true时全部页面均为H5打开AlibcTradeSDK.setForceH5(true);// 设置全局淘客参数,方便开发者用同一个淘客参数,不需要在show接口重复传入AlibcTradeSDK.setTaokeParams(taokeParams)// 设置渠道信息(如果有渠道专享价,需要设置)AlibcTradeSDK.setChannel(typeName, channelName)// ...}@Overridepublic void onFailure(int code, String msg) {//初始化失败,可以根据code和msg判断失败原因,详情参见错误说明}
});

资源销毁

在使用完成后,可以调用destroy方法,释放百川相应的资源引用

AlibcTradeSDK.destroy();

显示电商页面

实例化页面参数(必填)

// 商品详情,支持itemId和openItemId的商品,必填,不允许为null
AlibcBasePage page = new AlibcDetailPage(itemId);// 店铺,店铺id,支持明文id
AlibcBasePage page = new AlibcShopPage(shopId);// 添加购物车,支持itemId和openItemId的商品,必填,不允许为null;
AlibcBasePage page = new AlibcAddCartPage(itemId)// 我的订单
// status 默认跳转页面(0:全部, 1:待付款, 2:待发货, 3:待收货, 4:待评价)
// allOrder 为 true 显示所有订单,为false只显示通过当前app下单的订单
AlibcBasePage page = new AlibcMyOrdersPage(status, allOrder);// 我的购物车
AlibcBasePage page = new AlibcMyCartsPage();// URL
AlibcBasePage page = new AlibcPage(taokeUrl);

设置参数并并使用自定义webview打开页面

[注意]:当传入webviewClient,并重载shouldOverrideUrlLoading方法时,遇到淘系链接情况下(即访问淘宝、天猫、登录、购物车等页面时),该方法返回值要为false,否则可能会出现业务流程错误问题。


// 页面打开方式
AlibcShowParams params = new AlibcShowParams(OpenType.Native, isNeedPush);
// 淘宝客参数
AlibcTaokeParams taoke = new AlibcTaokeParams(pid, unionId, subId);
// 提供给三方传递配置参数
Map extras &#61; new HashMap<>(); // activity, page, callback 为必填
AlibcTrade.show(activity, webView, webViewClient, webChromeClient, page, params, taoke, extras, new AlibcTradeCallback() {&#64;Overridepublic void onTradeSuccess(TradeResult tradeResult) {//打开电商组件&#xff0c;用户操作中成功信息回调。tradeResult&#xff1a;成功信息&#xff08;结果类型&#xff1a;加购&#xff0c;支付&#xff1b;支付结果&#xff09;}&#64;Overridepublic void onFailure(int code, String msg) {//打开电商组件&#xff0c;用户操作中错误信息回调。code&#xff1a;错误码&#xff1b;msg&#xff1a;错误信息}
});

使用默认webview打开页面

AlibcTrade.show(context, page, params, taoke, extras, callback);

登陆授权(1.2.5)

电商SDK已经集成登陆授权
在电商SDK初始化时&#xff0c;会自动初始化登陆授权

自动触发登陆

在电商SDK打开的页面中&#xff0c;在需要时会自动触发调用登陆授权SDK

手动触发登陆

通过 AlibcLogin.showLogin 方法可以手动调起登陆

AlibcLogin.getInstance().showLogin(activity, new AlibcLoginCallback() {&#64;Overridepublic void onSuccess() { // }&#64;Overridepublic void onFailure(int code, String message) {}
});

接收登陆/登出结果

为了正常接收登陆/登出的结果&#xff0c;需要重写传入的 activity 的 onActivityResult 方法

&#64;Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) { CallbackContext.onActivityResult(this, requestCode, resultCode, data);
}

设置全局登陆回调

目前电商SDK里的 AlibcLogin 还未提供该功能
只能通过 MemberSDK 获取 LoginService 可以设置全局登陆回调

LoginService service &#61; (LoginService)MemberSDK.getService(LoginService.class)
service.setLoginCallback(new LoginCallback(){&#64;Overridepublic void onSuccess(Session session) { // }&#64;Overridepublic void onFailure(int code, String message) {}
})

错误码

public class KernelMessageConstants {public static final int GENERIC_SYSTEM_ERROR &#61; 10010;public static final int SERVER_REQUEST_FAILED &#61; 15;public static final int SERVICE_NOT_AVAILABLE_ERROR &#61; 17;
}public class SystemMessageConstants extends KernelMessageConstants {public static final int JS_BRIDGE_MODULE_NOT_FOUND &#61; 10000;public static final int USER_CANCEL_CODE &#61; 10003;public static final int H5_LOGIN_FAILURE &#61; 10101;public static final int TAOBAO_CANCEL_CODE &#61; 10004;public static final int TAOBAO_ERROR_CODE &#61; 10005;public static final int JS_BRIDGE_METHOD_NOT_FOUND &#61; 951;public static final int JS_BRIDGE_ANNOTATION_NOT_PRESENT &#61; 952;public static final int NET_WORK_ERROR &#61; 10099;public static final int NPE_ERROR &#61; 10098;
}

一些坑

在Dialog中打开页面

由于 dialog 会给 context 包上一层 ContextThemeWrapper, 而与 dialog 交互时 sdk 可能会从其中的 view 获取 context 然后转成 activity 这时就会出现异常导致崩溃。

一个解决办法是使用 LayoutInflater.from(activity) 来 inflate 对话框的布局

【bug】在授权或支付页面返回(failure)时会把传入的activity关闭(finish)

打开页面时必需传入一个activity&#xff0c;传入的activity被关闭&#xff0c;这通常不是期望的效果

通过重载传入的activity.finish方法可以临时解决

目前官方文档上使用的sdk版本 3.1.0.7 有这个问题&#xff0c;更新到 3.1.1.20 已经没有此问题

【bug】AlibcTrade 的默认 WebViewClient.shouldInterceptRequest 方法的逻辑错误

alibc_trade_sdk 包的 com.alibaba.baichuan.android.trade.c.b.b
它的 shouldInterceptRequest 方法如下

打开页面时我们传入的WebViewClient会被这个类代理

public WebResourceResponse shouldInterceptRequest(WebView var1, String var2) {return VERSION.SDK_INT > 23 && this.a !&#61; null && this.a.get() !&#61; null?((WebViewClient)this.a.get()).shouldInterceptRequest(var1, var2):super.shouldInterceptRequest(var1, var2);
}

这个方法是用于API LEVEL <21 的&#xff0c;然而 VERSION.SDK_INT > 23 这个错误的判断导致原本应该被执行的代码未执行

4.x 的设备都会因此bug产生各种问题

参考

阿里百川 SDK 官方文档
baichuan.taobao.com/docs/doc.ht…

3.1SDK 常见问题补充
baichuan.bbs.taobao.com/detail.html…

常见错误码
baichuan.taobao.com/docs/doc.ht…

SG error:XXX错误码
baichuan.taobao.com/docs/doc.ht…

客户端SDK常见问题
baichuan.taobao.com/docs/doc.ht…



推荐阅读
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Whatsthedifferencebetweento_aandto_ary?to_a和to_ary有什么区别? ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文介绍了在go语言中利用(*interface{})(nil)传递参数类型的原理及应用。通过分析Martini框架中的injector类型的声明,解释了values映射表的作用以及parent Injector的含义。同时,讨论了该技术在实际开发中的应用场景。 ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • PreparedStatement防止SQL注入
    添加数据:packagecom.hyc.study03;importcom.hyc.study02.utils.JDBCUtils;importjava.sql ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 双极型晶体管的制造工艺及应用
    本文介绍了双极型晶体管作为最早发明的半导体器件,在集成电路生产中的重要地位。双极型工艺凭借其高速、高跨导、低噪声以及较高的电流驱动能力等优势,得到了快速发展。文章详细介绍了双极型晶体管的基本元素、隔离工艺以及制作工艺流程。隔离技术包括pn结隔离、全介质隔离以及pn结-介质混合隔离等。制造工艺流程包括衬底选择、光刻、扩散、氧化等步骤。本文可作为双极型晶体管制造工艺及应用的参考资料。 ... [详细]
author-avatar
cut1089289
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有