阿里百川(百川应该取自海乃百川的意思,阿里提供一片海,汇入各种第三方应用)是阿里无线推出的一个计划,输出基础设施,打造一个开放的移动互联网应用开发及商业化平台。百川平台提供一个完整的解决方案,覆盖技术、数据服务、商业化,阿里百川甚至还具有一部分创业孵化功能,对于看中的APP,会提供创业场地与融资支持。

1、注册百川无线应用

2、开通业务产品的使用权限(根据情况决定开通初级电商还是高级电商)

3、获取安全图片

需要上传apk包,主要是获取包名以及签名,生成安全图片,所以这个安全图片与你上传的签名有关系,如果签名文件变了,那么安全图片要重新生成。

什么是安全图片

  • 百川平台将从上传的包内提取签名,包名等信息(所以为了获取安全图片所上去的apk只要包含签名和包名即可,其他内容随意),并加密存储到下载 SDK 中的安全图片。SDK 启动时会校验当前 apk 和图片中的签名信息,以避免发布的安装包被恶意篡改。另外,请注意如下事项:
  • 1)因为只提取安装包的签名以及包名信息,所以上传时对安装包的内容没有任何要求。
  • 2)请确保后续开发中用于 apk 签名的 keystore 和上传 apk 所使用的保持一致。
  • 3)如开发过程中或最终发布应用时需要切换其他 keystore,请上传使用新 keystore 签名的 apk 重新生成 SDK,并拷贝下载 SDK 中新的安全图片 ( res/drawable/yw_1222.jpg) 并替换掉当前开发工程中相同位置的同名文件。

使用须知

  • 安全图片是使用应用的appkey和其他相关信息(android还需要提供keystore签名的apk文件)一起加密生成的1像素点的加密图片。
  • 使用时请将图片改名为yw_1222.jpg,只需根据iOS和android放在对应的目录下,iOS:只要把安全图片放到工程目录底下即可; Android:需要把安全图片放到/res/drawable下。
  • 调用时,android客户端SDK会校验安全图片中加密的keystore和当前程序中的keystore是否一致,如果不一致初始化会失败。iOS客户端SDK会校验校验安全图片中加密的appkey信息和当前程序中的URL Types里面填写的appkey应用是否一致,若不一致也会报错。

项目根目录下的build.gradle

buildscript {
    repositories {
        maven {
            url 'https://maven.google.com'
        }
        mavenLocal()
        mavenCentral()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {
    repositories {
        mavenLocal()
        maven {
            url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/"
        }
        jcenter()
        google()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
        mavenCentral()
    }
}
task clean(type: Delete) {
    delete rootProject.buildDir
}

app内的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion "29.0.1"
    defaultConfig {
        applicationId "com.mingliang.fl"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

        debug {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }

    }

    android {
        lintOptions {
            abortOnError false
        }
    }

}

repositories {
    flatDir {
        dirs 'libs', '../libs'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    //支付宝
//    implementation 'com.alipay.android.app.cashier:standardcashier-single:15.6.5@aar'
//    compileOnly 'com.alipay.mobile.android.securitysdk:apsecuritysdk-all:3.3.0'
    //登陆
//    implementation(name:'alibabauth_core-2.0.0.6', ext:'aar')
//    implementation(name:'alibabauth_ui-2.0.0.6', ext:'aar')
//    implementation(name:'alibabauth_ext-2.0.0.6', ext:'aar')
    implementation 'com.ali.auth.sdk:alibabauth_core:2.0.0.6@aar'
    implementation 'com.ali.auth.sdk:alibabauth_ui:2.0.0.6@aar'
    implementation 'com.ali.auth.sdk:alibabauth_ext:2.0.0.6@aar'
    //安全组件
//    implementation(name:'securityguardaar3-5.4.11776953-preInstall-20190812.024439-1', ext:'aar')
//    implementation(name:'securitybodyaar3-5.4.95-preInstall-20190725.115618-1', ext:'aar')
//    implementation(name:'avmpaar3-5.4.11773689-preInstall-20190812.024446-1', ext:'aar')
//    implementation(name:'sgmiddletieraartest-6.4.999-NOFC-external-preinstall-20190819.071646-1', ext:'aar')
    implementation 'com.taobao.android:securityguardaar3:5.4.171@aar'
    implementation 'com.taobao.android:securitybodyaar3:5.4.99@aar'
    implementation 'com.taobao.android:avmpaar3:5.4.36@aar'
    implementation 'com.taobao.android:sgmiddletieraar3:5.4.9@aar'
    //Mtop(jar包远端依赖)
    implementation 'com.taobao.android:mtopsdk_allinone_open:3.1.2.5@jar'
    //applink
//    implementation(name:'alibc_link_partner-4.1.6', ext:'aar')
    implementation 'com.alibaba.sdk.android:alibc_link_partner:4.1.10@aar'
    //ut(jar包远端依赖)
    implementation 'com.taobao.android:utdid4all:1.1.5.3_proguard'
    implementation 'com.alibaba.mtl:app-monitor-sdk:2.6.4.5_for_bc'
    // 电商基础组件
//    implementation(name:'AlibcTradeCommon-3.1.1.243', ext:'aar')
//    implementation(name:'AlibcTradeBiz-3.1.1.243', ext:'aar')
//    implementation(name:'nb_trade-3.1.1.243', ext:'aar')
    implementation 'com.alibaba.sdk.android:AlibcTradeCommon:4.0.0.2@aar'
    implementation 'com.alibaba.sdk.android:AlibcTradeBiz:4.0.0.2@aar'
    implementation 'com.alibaba.sdk.android:nb_trade:4.0.0.2@aar'

    implementation 'com.alibaba:fastjson:1.2.41'
}

修改AndroidManifest.xml

  • 在Application onCreate()中异步初始化
//电商SDK初始化
        AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() {
            @Override
            public void onSuccess() {
                Toast.makeText(AliSdkApplication.this, "初始化成功", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(int code, String msg) {
                Toast.makeText(AliSdkApplication.this, "初始化失败,错误码="+code+" / 错误消息="+msg, Toast.LENGTH_SHORT).show();
            }
        });

工具类

public class BaiChuanUtil {
    private final static String H5 = "H5";
    private final static String TAOBAO = "taobao";
    private final static String TMALL = "tmall";
    private final static String AUTO = "auto";

    private static void showDetailPage(Activity activity, String id, String type) {
        AlibcShowParams alibcShowParams;
        switch (type) {
            case H5:
                alibcShowParams = new AlibcShowParams(OpenType.H5, false);
                break;
            case TAOBAO:
                alibcShowParams = new AlibcShowParams(OpenType.Native, false);
                alibcShowParams.setClientType("taobao_scheme");
                break;
            case TMALL:
                alibcShowParams = new AlibcShowParams(OpenType.Native, false);
                alibcShowParams.setClientType("tmall_scheme");
                break;
            case AUTO:
                alibcShowParams = new AlibcShowParams(OpenType.Auto, false);
                break;
            default:
                alibcShowParams = new AlibcShowParams(OpenType.Auto, false);
                break;
        }
        AlibcBasePage alibcBasePage = new AlibcDetailPage(id);
        HashMap<String, String> exParams = new HashMap<>();
        // 固定写法
        exParams.put(AlibcConstants.ISV_CODE, "appisvcode");
        // 若非淘客taokeParams设置为null即可   mm_memberId_siteId_adzoneId
        // pid:广告位id
        AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams("mm_123352308_40788301_344524398", "mm_123352308_40788301_344524398", null);
        AlibcTrade.show(activity, alibcBasePage, alibcShowParams, alibcTaokeParams, exParams, new AlibcTradeCallback() {
            @Override
            public void onTradeSuccess(AlibcTradeResult alibcTradeResult) {
            }

            @Override
            public void onFailure(int i, String s) {
//                Toast.makeText(App.getInstance(), "初始化失败,错误码=" + i + " / 错误消息=" + s, Toast.LENGTH_SHORT).show();
            }
        });
    }

    /**
     * 跳淘宝详情
     */
    public static void showTaobaoDetail(Activity activity, String id) {
        if (Tools.isApplicationAvilible(activity, "com.taobao.taobao")) {
            showDetailPage(activity, id, TAOBAO);
        } else {
            showDetailPage(activity, id, AUTO);
        }
    }

    /**
     * 跳天猫详情
     */
    public static void showTmallDetail(Activity activity, String id) {
        if (Tools.isApplicationAvilible(activity, "com.tmall.wireless")) {
            showDetailPage(activity, id, TMALL);
        } else {
            showDetailPage(activity, id, AUTO);
        }
    }
}

以上是Android配置部分
接下来是网站上需要设置的
首先找到控制台

android 是否登录 百川电商SDK 百川商户平台_android

创建应用

android 是否登录 百川电商SDK 百川商户平台_bc_02

重要的是应用包名要写对

android 是否登录 百川电商SDK 百川商户平台_阿里百川_03

获取安全图片,如果你上传一直失败,请把使用gradle3.0以下的编译环境的包,比如

classpath 'com.android.tools.build:gradle:2.3.3'

android 是否登录 百川电商SDK 百川商户平台_bc_04

下载安全图片放入如图,最好不要改它名字,(我没试过)

 

android 是否登录 百川电商SDK 百川商户平台_maven_05

开通两项功能

android 是否登录 百川电商SDK 百川商户平台_maven_06

进入淘宝联盟,使用之前的帐号登录

android 是否登录 百川电商SDK 百川商户平台_maven_07

新增app推广

android 是否登录 百川电商SDK 百川商户平台_maven_08

来到联盟首页,随意搜索商品推广

 

android 是否登录 百川电商SDK 百川商户平台_maven_09

选择之前新建的已经通过审核的app

android 是否登录 百川电商SDK 百川商户平台_maven_10

来到app推广位就可以看到我们要推广的产品了,其中比较重要的是pid

android 是否登录 百川电商SDK 百川商户平台_android_11

代码中的使用

AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams(pid, pid, null);

之前我们搜索的商品点进去

 

android 是否登录 百川电商SDK 百川商户平台_android_12

在地址栏可以获取到该商品的id

android 是否登录 百川电商SDK 百川商户平台_android_13

代码中的体现

AlibcBasePage alibcBasePage = new AlibcDetailPage(id);

结束!