FinClip为企业提供小程序生态圈技术产品,开发者可在FinClip小程序开发帮助中心找到相关FinClip小程序指引

# Android 快速集成

集成样例代码

1、我们提供了 DEMO 工程,开发者可以在Github(国外) (opens new window)Gitee(国内) (opens new window) 获取集成样例代码。

2、本文档为快速集成文档。仅仅只有SDK必要的初始化配置以及用AppId启动小程序的示例代码。如果需要更多的功能,请参考详细集成文档SDK集成。另外,不同版本的SDK,集成方式可能会有所不同,建议查看详细配置教程。

# 1. 获取凭据

请注意

集成 SDK 需要先在 FinClip 平台中创建应用绑定小程序,获得每个应用专属的SDK KEYSDK SECRET后,随后就可以在集成 SDK 时填写对应的参数。打开小程序时 SDK 会自动初始化,并校验SDK KEYSDK SECRETBundleID(Application ID)是否正确。

您可以 【点击这里】 查看如何获取所需要的SDK KEYSDK SECRET。请务必确认集成 SDK 时填写的参数正确,否则会导致小程序无法打开。

# 2. 导入SDK

# 2.1 通过Gradle依赖

# 2.1.1 在工程的build.gradle中需要配置的内容

由于 SDK 中部分代码使用了 Kotlin 来编写,因此需要工程的`build.gradle`中添加 Kotlin 的 gradle 插件:
```groovy
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61"

工程的build.gradle的完整配置如下:

buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:3.5.2"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url "https://gradle.finogeeks.club/repository/applet/"
            credentials {
                username "applet"
                password "123321"
            }
        }
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

# 2.1.2 在gradle中依赖SDK

gradle文件的dependencies中添加对finapplet的依赖:

implementation 'com.finogeeks.lib:finapplet:2.43.7' // 如果使用其他版本,建议查看详细配置教程。不同版本的配置可能会有所不同。

因此需要在 App module 下的build.gradle中增加doNotStrip配置:

packagingOptions {
    // libsdkcore.so是被加固过的,不能被压缩,否则加载动态库时会报错
    doNotStrip "*/x86/libsdkcore.so"
    doNotStrip "*/x86_64/libsdkcore.so"
    doNotStrip "*/armeabi/libsdkcore.so"
    doNotStrip "*/armeabi-v7a/libsdkcore.so"
    doNotStrip "*/arm64-v8a/libsdkcore.so"
}

完整的配置如下:

apply plugin: 'com.android.application'

android {
    buildToolsVersion '28.0.3'
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.finogeeks.finappletdemo"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        // libsdkcore.so是被加固过的,不能被压缩,否则加载动态库时会报错
        doNotStrip "*/x86/libsdkcore.so"
        doNotStrip "*/x86_64/libsdkcore.so"
        doNotStrip "*/armeabi/libsdkcore.so"
        doNotStrip "*/armeabi-v7a/libsdkcore.so"
        doNotStrip "*/arm64-v8a/libsdkcore.so"
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.finogeeks.lib:finapplet:2.43.7' // 如果使用其他版本,建议查看详细配置教程。不同版本的配置可能会有所不同。
}

# 2.2 配置混淆规则

集成 SDK 之后,为了避免 SDK 中部分不能被混淆的代码被混淆,需要在工程的混淆规则配置文件中增加以下配置:

-keep class com.finogeeks.** {*;}

# 3. SDK初始化

我们强烈建议在Application中对SDK进行初始化,初始化SDK需要传入的各项参数如下(sdk初始化只需要调用一次,应避免重复调用)

调用初始化接口初始化SDK:

FinAppClient.INSTANCE.init(this, config, callback);

# 3.1 SDK初始化多进程处理

SDK采用多进程机制实现,每个小程序运行在独立的进程中,即一个小程序对应一个进程,在初始化SDK时,要特别注意的一点是:小程序进程在创建的时候不需要执行任何初始化操作,即使是小程序SDK的初始化,也不需要在小程序进程中执行

例如:应用使用了一些第三方库,这些库需要在应用启动时先初始化,那么在Application中执行初始化时,只有当前进程为宿主进程时才需要初始化这些第三方库,小程序进程是不需要初始化这些库的。

因此,在初始化SDK之前,一定要判断当前进程是哪一个进程,如果是小程序进程,就不进行任何操作了:

if (FinAppClient.INSTANCE.isFinAppProcess(this)) {
    return;
}

以上即为初始化SDK的整个流程。完整代码如下:

package com.example.finogeeks.appletdemo;

import android.os.Process;
import android.support.multidex.MultiDexApplication;
import android.text.TextUtils;
import android.widget.Toast;
import com.example.finogeeks.appletdemo.api.ApiOpenPage;
import com.example.finogeeks.appletdemo.api.ApiOpenPageForResult;
import com.example.finogeeks.appletdemo.api.DrawModule;
import com.example.finogeeks.appletdemo.util.ProcessUtilKt;
import com.finogeeks.lib.applet.client.FinAppClient;
import com.finogeeks.lib.applet.client.FinAppConfig;
import com.finogeeks.lib.applet.interfaces.FinCallback;

/**
 * 应用的{@link android.app.Application}
 */
public class AppletApplication extends MultiDexApplication {
    
    @Override
    public void onCreate() {
        super.onCreate();

        if (FinAppClient.INSTANCE.isFinAppProcess(this)) {
            // 小程序进程不执行任何初始化操作
            return;
        }
        
        // 服务器信息集合
		List<FinStoreConfig> storeConfigs = new ArrayList<>();
		// 服务器的信息
		FinStoreConfig storeConfig = new FinStoreConfig(
        		"SDK Key信息",   // SDK Key
        		"SDK Secret信息",   // SDK Secret
        		"服务器1的地址",   // 服务器地址
        		"服务器1的数据上报服务器地址",   // 数据上报服务器地址
        		"/api/v1/mop/",   // 服务器接口请求路由前缀
        		"",
        		"加密方式",   // 加密方式,国密:SM,md5: MD5(推荐)
                false
		);
        
		storeConfigs.add(storeConfig);

		FinAppConfig config = new FinAppConfig.Builder()
        		.setFinStoreConfigs(storeConfigs) // 服务器信息集合
        		.build();

        FinAppClient.INSTANCE.init(this, config, new FinCallback<Object>() {
            @Override
            public void onSuccess(Object result) {
            }

            @Override
            public void onError(int code, String error) {
                Toast.makeText(AppletApplication.this, "SDK初始化失败", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onProgress(int status, String error) {

            }
        });
    }
}

# 4. 启动小程序

在平台中上架小程序之后,我们就可以通过调用SDK中启动小程序的接口来打开小程序了。启动小程序的代码如下:

// 构建request
RemoteFinAppletRequest request = new RemoteFinAppletRequest(apiServer, appId);
// 或使用以下方式省略服务器环境地址的配置,默认将使用SDK初始化时配置的第一个服务器环境地址
RemoteFinAppletRequest request = IFinAppletRequest.Companion.fromAppId(appId);
// 打开小程序
FinAppClient.INSTANCE.getAppletApiManager().startApplet(context, request, callback);
© FinClip with ❤ , Since 2017