悬浮窗开发指南
本文介绍如何在游戏中加入 TapTap 悬浮窗。使用悬浮窗功能需依赖 TapTap 登录(TapLogin)以及 TapTap 内嵌动态功能(TapMoment)。
环境要求
- Unity
- Android
- iOS
- UE4
- TapSDK 3.21.0 及以上版本
- Unity 2019.4 或更高版本
- iOS 11 或更高版本,Xcode 版本 14.1 或更高版本
- Android 5.0(API level 21)或更高版本
- TapSDK 3.21.0 及以上版本
- Android 5.0(API level 21)或更高版本
- TapSDK 3.21.0 及以上版本
- iOS 11 或更高版本,Xcode 版本 14.1 或更高版本
- TapSDK 3.22.0 及以上版本
- 安装 UE 4.26 及以上版本
- iOS 12 或更高版本
- Android 5.0(API level 21)或更高版本
- macOS 10.14.0 或更高版本
- Windows 7 或更高版本
支持平台:Android / iOS / Windows / macOS
权限说明
- Unity
- Android
- iOS
- UE4
该模块需要如下权限:
权限 | 使用目的 | 权限申请时机 |
---|---|---|
网络权限 | 用于访问网络数据 | 用户首次使用该功能时会申请权限 |
该模块将在应用中添加如下权限:
<uses-permission android:name="android.permission.INTERNET"/>
集成前准备
- 参考 准备工作 创建应用、开启悬浮窗相应设置;
SDK 获取
请先参考 TapTap 登录 和 内嵌动态完成 SDK 获取,然后在此基础上可以通过 下载 获得 TapSDK,添加 TapConnect
模块:
- Unity
- Android
- iOS
- UE4
SDK 可以通过 Unity Package Manager 导入或手动导入,二者任选其一。请根据项目需要选择。
方法一:使用 Unity Package Manager
从 3.29.1 版本开始, SDK 修改 JSON 解析库为 Newtonsoft-json
,如果当前工程已接入该依赖库,则不需额外处理,否则需在 Packages/manifest.json
添加如下依赖:
"com.unity.nuget.newtonsoft-json":"3.2.1"
NPMJS 安装
从 3.25.0 版本开始,TapSDK 支持了 NPMJS 安装,优势是只需要配置版本号,并且支持嵌套依赖。
在项目的 Packages/manifest.json
文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.connect":"3.29.4",
}
但需要注意的是,要在 Packages/manifest.json
中 dependencies
同级下声明 scopedRegistries
:
"scopedRegistries": [
{
"name": "NPMJS",
"url": "https://registry.npmjs.org/",
"scopes": ["com.tapsdk", "com.taptap", "com.leancloud"]
}
]
GitHub 安装
在项目的 Packages/manifest.json
文件中添加以下依赖:
"dependencies":{
"com.taptap.tds.login":"https://github.com/TapTap/TapLogin-Unity.git#3.29.4",
"com.taptap.tds.common":"https://github.com/TapTap/TapCommon-Unity.git#3.29.4",
"com.taptap.tds.connect":"https://github.com/TapTap/TapConnect-Unity.git#3.29.4",
"com.taptap.tds.moment":"https://github.com/TapTap/TapMoment-Unity.git#3.29.4",
}
在 Unity 顶部菜单中选择 Window > Package Manager 可查看已经安装在项目中的包。
方法二:手动导入
在 下载页 找到 TapSDK Unity 下载地址,下载
TapSDK-UnityPackage.zip
。在 Unity 项目中依次转到 Assets > Import Packages > Custom Packages,从解压后的
TapSDK-UnityPackage.zip
中,选择希望在游戏中使用的 TapSDK 包导入,其中:TapTap_Common.unitypackage
TapSDK 基础库,必选。TapTap_Login.unitypackage
TapTap 登录,必选。TapTap_Connect.unitypackage
TapTap 悬浮窗,必选。TapTap_Moment.unitypackage
TapTap 动态,必选。
如果当前项目已集成
Newtonsoft.Json
依赖,则忽略该步骤,否则在NuGet.org
Newtonsoft.Json 页面中通过点击右侧 「Download package」 下载库文件,并将下载的文件后缀从.nupkg
修改为.zip
,同时解压该文件并复制内部的Newtonsoft.Json.dll
文件拷贝到工程Assets
的Plugins
目录下,另外为了避免导出 IL2CPP 平台时删除必要数据,需在Assets
目录下创建link.xml
文件(如果已有该文件,则添加如下内容),其内容如下:
<linker>
<assembly fullname="System.Core">
<type fullname="System.Linq.Expressions.Interpreter.LightLambda" preserve="all" />
</assembly>
</linker>
repositories{
flatDir {
dirs 'libs'
}
}
dependencies {
...
implementation (name:'TapConnect_3.29.4', ext:'aar') // TapTap 悬浮窗
implementation (name:'TapMoment_3.29.4', ext:'aar') // TapTap 悬浮窗依赖内嵌动态-必选
implementation (name:'TapLogin_3.29.4', ext:'aar') // TapTap 悬浮窗依赖登录模块-必选
implementation (name:'TapCommon_3.29.4', ext:'aar') // 必选:TapSDK 基础库
implementation (name:'TapBootstrap_3.29.4', ext:'aar') // 可选:TapSDK 基础库
}
// 悬浮窗
TapConnectResource.bundle
TapConnectSDK.framework
// 悬浮窗依赖内嵌动态和登录模块-必选
TapMomentResource.bundle
TapMomentSDK.framework
TapLoginSDK.framework
TapLoginResource.bundle
// 基础模块-必选
TapCommonResource.bundle
TapCommonSDK.framework
// 3.29.4 版本需要添加 LibProtocolBuffers
LibProtocolBuffers.framework
// 基础模块-可选
TapBootstrapSDK.framework
PublicDependencyModuleNames.AddRange(new string[] {
//...
"TapConnect" //必选
"TapLogin" //必须-悬浮窗依赖登录模块
"TapMoment" //必选-悬浮窗依赖内嵌动态
"TapCommon" //必选-基础模块
"TapBootstrap"//可选-基础模块
});
初始化
以下两种初始化方式任选其一。
TapSDK 初始化
如果你已经完成内建账户系统 Tap 登录的初始化,这里只需要引入悬浮窗模块,不需要其他额外处理。
悬浮窗单独初始化
如果游戏不通过上面提供的 TapBootstrap
方法初始化 TapSDK,悬浮窗可以单独初始化,因为悬浮窗依赖单纯 Tap 认证和内嵌动态,
下面是单独初始化悬浮窗的示例代码:
- Unity
- Android
- iOS
- UE4
using TapTap.Connect; // 命名空间
TapConnect.Init("your_client_id", "your_client_token", (bool)isCN);
//activity 为当前 Activity 实例
TapConnect.init(activity, "clientId", "clientToken", isCN);
[TapConnect initWithClientId:@"clientId" clientToken:@"clientToken" isCN:YES];
FTapConnect::Init("clientId", "clientToken", true);
参数说明
client_id
、client_token
信息可在 开发者中心 > 你的游戏 > 游戏服务 > 应用配置 查看, isCN 表示是否为中国大陆地区的应用。
设置悬浮窗入口显示隐藏
有时开发者希望在某些场景下直接控制悬浮窗入口的显示隐藏,比如仅在部分场景显示悬浮窗入口,这时可以调用下面的接口:
- Unity
- Android
- iOS
- UE4
TapConnect.SetEntryVisible(bool visible)
TapConnect.setEntryVisible(boolean visible);
[TapConnect setEntryVisible:YES];
FTapConnect::SetEntryVisible(true);
国际化
悬浮窗支持设置语言:
- Unity
- Android
- iOS
- UE4
TapCommon.SetLanguage(TapLanguage.AUTO);
支持如下语言:
namespace TapTap.Common
{
public enum TapLanguage
{
AUTO = 0, // 自动
ZH_HANS = 1, // 简体中文
EN = 2, // 英文
ZH_HANT = 3, // 繁体中文
JA = 4, // 日文
KO = 5, // 韩文
TH = 6, // 泰文
ID = 7, // 印尼语
DE = 8, // 德语
ES = 9, // 西班牙语
FR = 10, // 法语
PT = 11, // 葡萄牙语
RU = 12, // 俄语
TR = 13, // 土耳其语
VI = 14, // 越南语
}
}
TapLanguage lang = 0;
TapBootstrap.setPreferredLanguage(TapLanguage.AUTO);
支持如下语言:
AUTO 跟随系统
ZH_HANS 简体中文
EN 英文
ZH_HANT 繁体中文
JA 日文
KO 韩文
TH 泰文
ID 印尼语
DE 德语
ES 西班牙语
FR 法语
PT 葡萄牙语
RU 俄语
TR 土耳其语
VI 越南语
[TapBootstrap setPreferredLanguage:TapLanguageType_Auto];
支持如下语言:
typedef NS_ENUM (NSInteger, TapLanguageType) {
TapLanguageType_Auto = 0, // 自动
TapLanguageType_zh_Hans, // 简体中文
TapLanguageType_en, // 英文
TapLanguageType_zh_Hant, // 繁体中文
TapLanguageType_ja, // 日文
TapLanguageType_ko, // 韩文
TapLanguageType_th, // 泰文
TapLanguageType_id, // 印度尼西亚语
TapLanguageType_de, // 德语
TapLanguageType_es, // 西班牙语
TapLanguageType_fr, // 法语
TapLanguageType_pt, // 葡萄牙语
TapLanguageType_ru, // 俄语
TapLanguageType_tr, // 土耳其语
TapLanguageType_vi, // 越南语
};
TapUECommon::SetLanguage(ELanguageType::AUTO);
支持如下语言:
UENUM(BlueprintType)
enum class ELanguageType : uint8
{
AUTO = 0, // 自动
ZH, // 简体中文
EN, // 英文,海外默认语言
ZHTW, // 繁体中文
JA, // 日语
KO, // 韩语
TH, // 泰文
ID, // 印尼文
DE, // 德语
ES, // 西班牙语
FR, // 法语
PT, // 葡萄牙语
RU, // 俄语
TR, // 土耳其语
VI, // 越南语
};
「自动」会尝试根据系统语言设置语言,如果系统语言不在上述支持的语言之中,那么会根据 SDK 初始化时配置的区域设置语言。 区域为中国大陆时会设置为简体中文,否则会设置为英文。