跳到主要内容

集成 SDK

目前暂时只支持手动集成的方式.

后续会添加 Package Manager 的自动集成方式.

手动集成

危险
  • 每次替换新版本请删除再替换 Packages/com.seayoo.omnisdk.
  • 不要主动删除 OmniSDK 所包含的 meta 文件.

获取 SDK 版本

请从 版本更新说明 下载 SDK 的最新版本。

下载并解压后,将 com.seayoo.omnisdk 文件夹拷贝到 Unity 项目的 Packages目录下

img

Android

Setup

利用 Unity 自带的 Android 项目构建机制, 在 Assets/Plugins/Android/ 可以添加模版文件,最终会自动合并到工程内。

Unity Plugin 模板文件Android 工程目标文件
AndroidManifest.xmlAndroidManifest.xml
mainTemplate.gradlebuild.gradle
gradleTemplate.propertiesgradle.properties

img

警告
  • 下方文件的 highlight 为 OmniSDK 添加的差异化内容,也可自行拷贝至自定义的模版

AndroidManifest.xml

信息

这段代码按照 Android 接入文档 的指南进行了以下配置:

  • applicationandroid:name 属性值被设为 com.kingsoft.shiyou.omnisdk.api.OmniApplication
  • activityandroid:name 属性值被设为 com.seayoo.sdk.OmniSDKMainActivity。这是 Unity SDK 默认提供的 Activity。如需进行改动,请参见 Android GameActivity 接入 获取详细信息。

为了适应 Android 12 的新需求,我们进行了以下设定:

  • activityandroid:exported 的值必须明确设为 truefalse。这是为了适配 Android 12(目标API等级为31或更高)的新规定,其中要求 android:exported 必须被明确声明。有关此变更的更多信息,请查阅 Android 开发文档
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.seayoo.omnisdkunity" xmlns:tools="http://schemas.android.com/tools" android:installLocation="preferExternal">
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />
<application android:name="com.kingsoft.shiyou.omnisdk.api.OmniApplication" android:theme="@style/UnityThemeSelector" android:icon="@mipmap/app_icon" android:label="@string/app_name">
<activity android:label="@string/app_name" android:screenOrientation="reverseLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false" android:name="com.seayoo.sdk.OmniSDKMainActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
<meta-data android:name="unity.build-id" android:value="29ff3e62-55a3-445e-a6c9-e2a318be78a1" />
<meta-data android:name="unity.splash-mode" android:value="0" />
<meta-data android:name="unity.splash-enable" android:value="True" />
</application>
<uses-feature android:glEsVersion="0x00020000" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>

gradleTemplate.properties

信息

根据 Android 集成文档 的要求,开启了 AndroidXenableJetifier 配置。

org.gradle.jvmargs=-Xmx4096M
android.useAndroidX=true
android.enableJetifier=true

mainTemplate.gradle

信息

mainTemplate.gradle 可以通过 File -> Build Settings -> Player Settings -> Publishing Settings -> Build -> Custom Gradle Template 生成

依据 Android 集成文档 配置了 OmniSDK 的 Gradle 依赖,如需修改 build.gradle 请仔细阅读 Android 集成文档

Android Gradle 插件(com.android.tools.build:gradle)版本请依据 Android Gradle 插件版本说明 进行配置。

// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN

buildscript {
repositories {**ARTIFACTORYREPOSITORY**
mavenCentral()
google()
jcenter()
apply from: ("${rootProject.rootDir}/kssyOmniBuildscriptRepositories.gradle")
}

dependencies {
classpath 'com.android.tools.build:gradle:4.2.2'
apply from: ("${rootProject.rootDir}/kssyOmniBuildscriptDependencies.gradle")
**BUILD_SCRIPT_DEPS**}
}

allprojects {
repositories {**ARTIFACTORYREPOSITORY**
mavenCentral()
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}

apply from: ("${rootProject.rootDir}/kssyOmniChannelsRoot.gradle")

apply plugin: 'com.android.application'
**APPLY_PLUGINS**

apply from: ("${rootProject.rootDir}/kssyOmniPlugin.gradle")
apply from: ("${rootProject.rootDir}/kssyOmniChannelsApp.gradle")
apply from: ("${rootProject.rootDir}/kssyOmniChannels.gradle")

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
**DEPS**}

android {
compileSdkVersion **APIVERSION**
buildToolsVersion '**BUILDTOOLS**'

compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}

defaultConfig {
minSdkVersion **MINSDKVERSION**
targetSdkVersion **TARGETSDKVERSION**
applicationId '**APPLICATIONID**'
ndk {
abiFilters **ABIFILTERS**
}
versionCode **VERSIONCODE**
versionName '**VERSIONNAME**'
}

lintOptions {
abortOnError false
}

aaptOptions {
noCompress = ['.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**]
}**SIGN**

buildTypes {
debug {
minifyEnabled **MINIFY_DEBUG**
useProguard **PROGUARD_DEBUG**
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD**
jniDebuggable true
}
release {
minifyEnabled **MINIFY_RELEASE**
useProguard **PROGUARD_RELEASE**
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-unity.txt'**USER_PROGUARD****SIGNCONFIG**
}
}**PACKAGING_OPTIONS****SPLITS**
**BUILT_APK_LOCATION**
bundle {
language {
enableSplit = false
}
density {
enableSplit = false
}
abi {
enableSplit = true
}
}
}**SPLITS_VERSION_CODE****REPOSITORIES****SOURCE_BUILD_SETUP**

Unity Player Settings

Other Settings

警告

Unity 2018 已知问题

当导出 Android 项目的 Target API Level 为 31 或以上时,Unity 2018 可能会在 Android 12 上出现启动后黑屏或卡死的问题。这是由于 Android 12 中已废弃了 TelephonyManagerlisten 函数。如果应用程序未获得 READ_PHONE_STATE 权限,此函数将抛出 SecurityException

在 Unity 启动时,如果已启用内置的音频系统,将调用 TelephonyManager.listen() 以在用户接电话时静音游戏。这可能导致抛出异常,导致游戏启动黑屏或卡死。

解决方案: 在 PlayerSettings -> OtherSettings 中,勾选 "Mute Other Audio Sources" 选项。

更多详细信息请参考 Unity 论坛相关讨论

Build

Step 1. 在 Android Studio 中 安装 KSSYOmniSDKTools 插件,如已安装可跳过。

Step 2. 更新发布计划,请仔细阅读 发布计划配置说明

Step 3. 点击 Gradle Sync 进行同步。

Step 4. 通过 KSSYOmniSDKTools -> ChannelTree 面板进行编译出包,详见 KSSYOmniSDKTools 工具集 UI

更多内容请参阅 Android 构建与出包文档

iOS

Setup

构建 iOS 工程

OmniSDK 已通过 Unity 构建后处理机制对导出的 Xcode 工程作如下配置:

  • Runpath Search Paths 配置

img

  • 嵌入 Swift 标准库

此配置是为防止当 iOS Deployment Target < 12.2 时,启动时崩溃。

img

  • 关闭 Bitcode

img

SDK 初始化参数

参数详情请见

将导出的 iOS 工程通过 Xcode 打开,在 Info.plist 文件中配置 SDK 初始化参数。

集成 XCFrameworks 组件

组件详情请见

在工程中拖入所需 XCFrameworks 文件夹,拖入时 Xcode 会弹出如下图选项框,请按照下图在选项框中勾选:

img

嵌入动态库

危险

不配置此项,会导致游戏客户端在启动时因为缺少动态库而 crash

在 Target Unity-iPhone 中,嵌入所需组件对应的动态库(把选项 Do Not Embed 改为 Embed & Sign

img

Windows

Setup

创建 OmniSDK Settings

导入 OmniSDK Package 后,选择菜单项 OmniSDK -> Assets -> Create Settings

img

配置 OmniSDK Settings

PropertyTypeRequiredDescription
AppIdStringTrue应用 ID
OmniSDK 为每个应用配置的独立的 ID
AppKeyStringTrue应用客户端密钥
OmniSDK 为每个应用配置的独立的 Client Key
PlanIdStringTrue发布计划 ID
主要为获取不同的渠道参数,由 OmniSDK 提供
ServerUrlStringTrueOmniSDK 服务端 Url
默认已经提供,不需要修改