热门标签 | 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…



推荐阅读
  • 应用链时代,详解 Avalanche 与 Cosmos 的差异 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 解决Only fullscreen opaque activities can request orientation错误的方法
    本文介绍了在使用PictureSelectorLight第三方框架时遇到的Only fullscreen opaque activities can request orientation错误,并提供了一种有效的解决方案。 ... [详细]
  • 本文介绍如何在 Android 中自定义加载对话框 CustomProgressDialog,包括自定义 View 类和 XML 布局文件的详细步骤。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 卓盟科技:动态资源加载技术的兼容性优化与升级 | Android 开发者案例分享
    随着游戏内容日益复杂,资源加载过程已不仅仅是简单的进度显示,而是连接玩家与开发者的桥梁。玩家对快速加载的需求越来越高,这意味着开发者需要不断优化和提升动态资源加载技术的兼容性和性能。卓盟科技通过一系列的技术创新,不仅提高了加载速度,还确保了不同设备和系统的兼容性,为用户提供更加流畅的游戏体验。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 在Android 4.4系统中,通过使用 `Intent` 对象并设置动作 `ACTION_GET_CONTENT` 或 `ACTION_OPEN_DOCUMENT`,可以从相册中选择图片并获取其路径。具体实现时,需要为 `Intent` 添加相应的类别,并处理返回的 Uri 以提取图片的文件路径。此方法适用于需要从用户相册中选择图片的应用场景,能够确保兼容性和用户体验。 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
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社区 版权所有