前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术实操| 自有App如何引入小游戏(Android篇)

技术实操| 自有App如何引入小游戏(Android篇)

原创
作者头像
Lydiasq
发布2022-12-28 10:19:31
1.1K0
发布2022-12-28 10:19:31
举报
文章被收录于专栏:Fin

之前有跟大家分享过ios系统上引入FinClip SDK,并将小程序游戏运行到自有App 中,这周就继续分享如何在Android系统中引入FinClip SDK。

近期FinClip官方正在举行小游戏支持的功能内测,有兴趣的朋友可以去看看。手动指引:小游戏内测活动https://www.finclip.com/blog/chan-pin-nei-ce/

实现效果:在自有 App 中实现小程序游戏运行 使用技术:FinClip下载/升级最新版IDE即可使用) 测试机:Android 测试Demo:飞机大战

Android 项目中引入 FinClip SDK ,实现小程序游戏在 App 中运行,操作如下:

第一步:获取凭据( SDK KEY 及 SDK SECRET)

首先,集成 SDK 需要先在 FinClip 平台中创建应用并绑定小程序游戏应用,获得每个应用专属的SDK KEY及SDK SECRET后,随后就可以在集成 SDK 时填写对应的参数。打开小程序时 SDK 会自动初始化,并校验SDK KEY,SDK SECRET与BundleID(Application ID)是否正确,这一步正确了才能初始化成功并正常使用。

1.1 创建小程序游戏

需要登录FinClip管理后台「宿主应用-新增合作应用」,完成小游戏应用创建;

注册用户需要登录「宿主应用-新增合作应用」,完成应用创建

1.2 获取 SDK KEY 及 SDK SECRET

新增应用后,可以展开应用名称,在下方的列表中点击「添加 BundleID」,在出现的弹窗中输入需要绑定应用的 BundleID。

配置 BundleID

完成 BundleID 的填写,并点击确定按钮后,您会看到如上图所示的界面。其中的SDK KEY,SDK SECRET与API SERVER是您在集成小程序 SDK 时需要要到的凭据。

⚠️请注意:

  • SDK KEY:是合作应用能使用小程序 SDK 的凭证,如果 SDK Key 校验失败,则SDK 的所有 Api 都无法使用。
  • SDK SECERT:是访问服务的安全证书,不要给第三方。

第二步:导入 SDK

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

在工程的build.gradle中添加 maven 仓库的地址:

代码语言:javascript
复制
maven {
    url "https://gradle.finogeeks.club/repository/applet/"
    credentials {
		username "applet"
		password "123321"
	}
}

由于 SDK 中部分代码使用了 Kotlin 来编写,因此需要工程的build.gradle中添加 Kotlin 的 gradle 插件:

代码语言:javascript
复制
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.61"

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

代码语言:javascript
复制
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.2 在gradle中依赖SDK

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

代码语言:javascript
复制
implementation 'com.finogeeks.lib:finapplet:x.y.z' //x.y.z须替换为具体的版本号

注意:SDK 中的动态库是被加固过的,被加固过的动态库在编译打包时不能被压缩,否则加载的时候会报错。

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

代码语言:javascript
复制
packagingOptions {
      // libsdkcore.so、libfin-yuvutil.so是被加固过的,不能被压缩,否则加载动态库时会报错
      doNotStrip "*/x86/libsdkcore.so"
      doNotStrip "*/x86_64/libsdkcore.so"
      doNotStrip "*/armeabi/libsdkcore.so"
      doNotStrip "*/armeabi-v7a/libsdkcore.so"
      doNotStrip "*/arm64-v8a/libsdkcore.so"
      
      doNotStrip "*/x86/libfin-yuvutil.so"
      doNotStrip "*/x86_64/libfin-yuvutil.so"
      doNotStrip "*/armeabi/libfin-yuvutil.so"
      doNotStrip "*/armeabi-v7a/libfin-yuvutil.so"
      doNotStrip "*/arm64-v8a/libfin-yuvutil.so"
}

2.3 配置混淆规则

在 App 的 proguard-rules.pro 文件里面添加混淆配置

代码语言:javascript
复制
-keep class com.finogeeks.** {*;}

第三步:初始化 FinClip SDK

2.13.102版本开始 SDK支持配置多个服务器信息,可以同时打开不同环境中的小程序。配置参数如下:

3.1 小程序框架的配置信息

代码语言:javascript
复制
// 服务器信息集合
List<FinStoreConfig> storeConfigs = new ArrayList<>();

// 服务器1的信息
FinStoreConfig storeConfig1 = new FinStoreConfig(
        "SDK Key信息",   // SDK Key
        "SDK Secret信息",   // SDK Secret
        "服务器1的地址",   // 服务器地址
        "服务器1的数据上报服务器地址",   // 数据上报服务器地址
        "/api/v1/mop/",   // 服务器接口请求路由前缀
        "",
        "加密方式"   // 加密方式,国密:SM,md5: MD5(推荐)
);
storeConfigs.add(storeConfig1);

// 服务器2的信息
FinStoreConfig storeConfig2 = new FinStoreConfig(
        "SDK Key信息",   // SDK Key
        "SDK Secret信息",   // SDK Secret
        "服务器2的地址",   // 服务器地址
        "服务器2的数据上报服务器地址",   // 数据上报服务器地址
        "/api/v1/mop/",   // 服务器接口请求路由前缀
        "",
        "加密方式"   // 加密方式,国密:SM,md5: MD5(推荐)
);
storeConfigs.add(storeConfig2);

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

3.2 设置SDK初始化状态回调

实现FinCallback接口,用于监听SDK初始化状态:

代码语言:javascript
复制
// SDK初始化结果回调,用于接收SDK初始化状态
FinCallback<Object> callback = new FinCallback<Object>() {
    @Override
    public void onSuccess(Object result) {
        // SDK初始化成功
    }

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

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

    }
};

3.3 初始化SDK

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

代码语言:javascript
复制
FinAppClient.INSTANCE.init(this, config, callback);

3.4 SDK初始化多进程处理

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

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

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

代码语言:javascript
复制
if (FinAppClient.INSTANCE.isFinAppProcess(this)) {
    return;
}

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

代码语言:javascript
复制
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<>();

		// 服务器1的信息
		FinStoreConfig storeConfig1 = new FinStoreConfig(
        		"SDK Key信息",   // SDK Key
        		"SDK Secret信息",   // SDK Secret
        		"服务器1的地址",   // 服务器地址
        		"服务器1的数据上报服务器地址",   // 数据上报服务器地址
        		"/api/v1/mop/",   // 服务器接口请求路由前缀
        		"",
        		"加密方式"   // 加密方式,国密:SM,md5: MD5(推荐)
		);
		storeConfigs.add(storeConfig1);

		// 服务器2的信息
		FinStoreConfig storeConfig2 = new FinStoreConfig(
        		"SDK Key信息",   // SDK Key
        		"SDK Secret信息",   // SDK Secret
        		"服务器2的地址",   // 服务器地址
        		"服务器2的数据上报服务器地址",   // 数据上报服务器地址
        		"/api/v1/mop/",   // 服务器接口请求路由前缀
        		"",
        		"加密方式"   // 加密方式,国密:SM,md5: MD5(推荐)
		);
		storeConfigs.add(storeConfig2);

		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) {

            }
        });
    }
}

第四步:启动小程序

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

代码语言:javascript
复制
FinAppClient.INSTANCE.getAppletApiManager().startApplet(this, "5e0dc1f574193e00010d73c1");

如果启动小程序时需要携带启动参数,则可以调用支持传递启动参数的接口,

更多关于 FinClip 小程序 SDK 引入的介绍,可以查看 官方文档

打开效果如下:

大家可以亲自上手试试看咯,有任何问题可以向官方提出哦!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:获取凭据( SDK KEY 及 SDK SECRET)
  • 第二步:导入 SDK
  • 第三步:初始化 FinClip SDK
  • 第四步:启动小程序
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档