Player Network SDK Integration - Unity
Prerequisites
The versions of every SDK plugin used in the game (including the version used by the game launcher) must remain consistent.If the game needs to access multiple versions of the Player Network SDK at the same time or only one component needs to be upgraded, please contact the Player Network assistant.
Enter the PlayerNetwork SDK Download Page and choose the appropriate engine and platform to download the PlayerNetwork SDK.For details, refer to the PlayerNetwork SDK Download Guide.
Step 1: Install the SDK
- Android
- iOS
- Windows
- SDK 1.27 and later versions
- SDK 1.24 ~ 1.26
- SDK below 1.24
Unity 2021 ~ Unity 6
androidx
minSdkVersion: 21
targetSdkVersion: 34
compileSdkVersion: 34
If you integrate with LINE, minSdkVersion must be upgraded to 24.
If you integrate with Discord, minSdkVersion must be upgraded to 23.
Note before project submission for review: Starting from SDK V1.24.00, Google has added foreground service permissions declaration.If this declaration is not approved by Google, resubmitting for review may take about a week.For more information, see Specify Foreground Service Types.
Unity 2021 ~ Unity 2022
androidx
minSdkVersion: 21
targetSdkVersion: 34
compileSdkVersion: 34
If you integrate with LINE, minSdkVersion must be upgraded to 24.
If you integrate with Discord, minSdkVersion must be upgraded to 23.
Note before project submission for review: Starting from SDK V1.24.00, Google has added foreground service permissions declaration.If this declaration is not approved by Google, resubmitting for review may take about a week.For more information, see Specify Foreground Service Types.
Unity 2018 ~ Unity 2022
- Unity 2022 and later versions
- Before Unity 2022
androidx
minSdkVersion: 19
targetSdkVersion: 34
compileSdkVersion: 34
If you integrate VK, you need to upgrade minSdkVersion to 21.
If you integrate Discord, you need to upgrade minSdkVersion to 23.
androidx
minSdkVersion: 16
targetSdkVersion: 34
compileSdkVersion: 34
If you integrate LINE, you need to upgrade minSdkVersion to 19.
If you integrate Firebase, you need to upgrade minSdkVersion to 19, Android Gradle to V6.7.1 or higher, and Android Gradle Plugin to V4.2.0 or higher.
If you integrate VK, you need to upgrade minSdkVersion to 21.
If you integrate Discord, you need to upgrade minSdkVersion to 23.
If you integrate Adjust, you need to upgrade minSdkVersion to 18.
1. Add Player Network SDK to your project
- Extract the SDK package.
- Copy the
INTLSDKfolder to your project'sAssetsfolder. - Merge the
Pluginsfolder from Player Network SDK into your project'sPluginsfolder.
Player Network SDK package
├─INTLSDK // Player Network SDK CS scripts that offer APIs and callbacks
│ ├─Editor // Editor scripts for Player Network SDK including Player Network SDK XUPorter
│ └─Scripts // Scripts for Player Network SDK that include INTLCore and other plugin scripts
├─LevelInfinite // LI PASS APIs
├─Plugins // Plugins for Player Network SDK for various platforms
│ ├─Android
│ ├─iOS
│ ├─MacOS
│ └─Windows~
├─Symbols // Symbol table *.so files for Player Network SDK
└─UnionAdapter // UnionAdapter APIs that adapt to both MSDK and Player Network SDK
INTLSDK/Scripts/INTLCore
├─INTLSDK
│ ├─Editor
│ └─Scripts
│ ├─INTLConfig
| └─INTLCore
| ├─Editor // INTLCore PostProcess.cs / PreProcess.cs files for different platforms
| | ├─INTLCoreAndroidPostProcess.cs
| | ├─INTLCoreiOSPostProcess.cs
| | ├─INTLCoreMacOSPostProcess.cs
| | ├─INTLCoreWindowsPostProcess.cs
| | └─INTLCoreWindowsPreProcess.cs
| └─Scripts // INTLCore scripts
| ├─INTLAPI.cs // Player Network SDK APIs
| ├─INTLConfig.cs // Player Network SDK data structures
| ├─INTLDefine.cs // Player Network SDK static strings
| ├─INTLErrorCode.cs // Player Network SDK error codes
| ├─Modules
| └─Utils
├─LevelInfinite
├─Plugins
├─Symbols
└─UnionAdapter
INTLSDK/Script/INTLConfig
├─INTLSDK
│ ├─Editor
│ └─Scripts
│ ├─INTLConfig
| | └─Editor // Configuration files for Player Network SDK, PostProcess.cs files, and encryption tools
| | ├─Encrypt
| | | ├─decrypt // Decryption tool for Player Network SDK for INTLConfig.ini
| | | ├─Decrypt.exe // Decryption tool for Player Network SDK for INTLConfig.ini
| | | ├─encrypt // Encryption tool for Player Network SDK for INTLConfig.ini
| | | ├─Encrypt.exe // Encryption tool for Player Network SDK for INTLConfig.ini
| | | ├─EncryptConfig.ini // File to enable or disable encryption for INTLConfig.ini in Player Network SDK
| | | ├─INTLConfigINI.cs
| | | ├─INTLConfigINIEditor.cs
| | | └─INTLEditorTools.cs
| | ├─INTLConfigAndroidPostProcess.cs
| | ├─INTLConfigiOSPostProcess.cs
| | ├─INTLConfigMacOSPostProcess.cs
| | ├─INTLConfigSwitchPreProcess.cs
| | ├─INTLConfigWindowsPostProcess.cs
| | └─Resources // Configurations for Player Network SDK
| | ├─APASConfig.ini // Configuration file for APAS device level
| | └─INTLConfig.ini // Main configuration file for Player Network SDK
| └─INTLCore
├─LevelInfinite
└─Plugins
2. Load required permissions and plug-ins
If your game has not created an Android custom activity, please refer to Create a custom activity.
Add the Player Network SDK code for loading permissions, libraries, and plug-ins to your custom launch activity (Android games request permissions and load plug-ins here).
Add code to load libraries
static {
try {
System.loadLibrary("INTLFoundation");
System.loadLibrary("INTLCore");
System.loadLibrary("INTLUnityAdapter");
}
catch (Exception e) {
e.printStackTrace();
}
}
Register activity lifecycle
import com.intlgame.api.INTLSDK;
import android.content.Intent;
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// add this line
INTLSDK.initialize(MainActivity.this);
}
@Override
public void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// add this line
INTLSDK.onNewIntent(intent);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// add this line
INTLSDK.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onRequestPermissionsResult(int arg0, String[] arg1, int[] arg2) {
super.onRequestPermissionsResult(arg0, arg1, arg2);
// add this line
INTLSDK.onRequestPermissionsResult(arg0, arg1, arg2);
}
Load dynamic permissions
Acquire dynamic permissions through code
Add the following code to apply for permissions dynamically:
import android.app.Activity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
import java.util.List;
private void RequestPermission(Activity activity, List<String> permissionList, int requestCode) {
if (null != activity && null != permissionList) {
List<String> permissionNeeded = new ArrayList();
for (int i = 0; i < permissionList.size(); ++i) {
String permission = (String) permissionList.get(i);
if (null != permission && 0 != ContextCompat.checkSelfPermission(activity.getApplicationContext(), permission)) {
permissionNeeded.add(permission);
}
}
if (permissionNeeded.size() > 0) {
ActivityCompat.requestPermissions(activity, (String[]) permissionNeeded.toArray(new String[permissionNeeded.size()]), requestCode);
}
}
}
private void RequestDynamicPermissions() {
List<String> permissions = new ArrayList();
permissions.add("android.permission.INTERNET");
permissions.add("android.permission.READ_PHONE_STATE");
this.RequestPermission(this, permissions, 100);
}
Call RequestDynamicPermissions:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// add this line
RequestDynamicPermissions();
INTLSDK.initialize(MainActivity.this);
}
Notched screen compatibility settings
After Android P, Android provides a standard API for notched screens.However, for Android O devices, different vendors have different implementation logics.Player Network SDK provides unified C++ API and Java API to support various Android O devices such as Xiaomi, Huawei, Samsung, VIVO, and OPPO.
Player Network SDK includes an INTLUnityAdapter module which supports Unity games using C# to make unmanaged calls to C++ API.For more information, see Async Cutout Info Reading.
Generally, the full screen aspect ratio of mobile phones is greater than 2.1.To avoid black borders, users must modify android.max_aspect to be greater than 2.1.
For Huawei and Xiaomi phones using the Android Oreo operating system, users must configure the AndroidManifest.
<!--Supports full-screen aspect ratio of 2.4 to adapt to the future 21:9 ultra-widescreen-->
<meta-data android:name="android.max_aspect" android:value="2.4" />
<!--Xiaomi O version definition: Whether to use ear areas (high-risk area)-->
<!--values:
none: ear areas not rendered in portrait or landscape mode,
portrait: ear areas rendered in portrait mode,
landscape: ear areas rendered in landscape mode,
portrait|landscape: ear areas rendered in both portrait and landscape mode
-->
<meta-data android:name="notch.config" android:value="portrait|landscape"/>
<!--Huawei O version definition: App pages use notch area-->
<meta-data android:name="android.notch_support" android:value="true"/>
For games that use Android API to obtain notched screen safe area information, please add the following configuration:
Add the following code in MainActivity.
import android.os.Build;
import android.view.WindowManager;
import android.view.View;
private void setFullScreen()
{
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);// Set full screen
int systemUiVisibility = 0;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
systemUiVisibility = this.getWindow().getDecorView().getSystemUiVisibility();
int flags = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN;
systemUiVisibility |= flags;
getWindow().getDecorView().setSystemUiVisibility(systemUiVisibility);
}
// P version is allowed to use the notch area
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams lp = this.getWindow().getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
this.getWindow().setAttributes(lp);
}
}
Call setFullScreen() here.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// add this line
setFullScreen();
this.RequestDynamicPermissions();
INTLSDK.initialize(this);
}
In PlayerSetting, select Render outside safe area.

3. Generate JAR package
Before generating the JAR package, replace all com.intlgame.unity.MainActivity in Plugins/Android/AndroidManifest.xml with the actual package name of your game, for example com.example.myapp.MainActivity.
Player Network SDK uses Gradle to generate JAR packages.The Gradle configuration files include third-party SDK version numbers as well as dependencies required by Player Network SDK and third-party channels.Games need to add the necessary dependencies according to the required plug-ins.
mainTemplate.gradle and INTLCore.mainTemplate.gradle files are the Player Network SDK Gradle configuration files.Update the Gradle configuration according to the game requirements.
Unity 2018
| File | File path |
|---|---|
| mainTemplate.gradle | Plugins/Android |
| INTLCore.mainTemplate.gradle | Plugins/Android/Gradle |
At least two updates:
- Merge your game's
mainTemplate.gradleinto the Player Network SDK'smainTemplate.gradle, and retain the content marked by Player Network SDK.
buildscript {
repositories {**ARTIFACTORYREPOSITORY**
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Player Network SDK ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
maven {
url "https://mirrors.tencent.com/nexus/repository/maven-public/"
}
maven {
url "https://mirrors.tencent.com/repository/maven/thirdparty"
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Player Network SDK ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
mavenCentral()
google()
jcenter()
}
dependencies {
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Player Network SDK ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
classpath 'com.android.tools.build:gradle:4.0.1'
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Player Network SDK ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
**BUILD_SCRIPT_DEPS**
}
}
allprojects {
repositories {**ARTIFACTORYREPOSITORY**
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Player Network SDK ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
maven {
url "https://mirrors.tencent.com/nexus/repository/maven-public/"
}
maven {
url "https://mirrors.tencent.com/repository/maven/thirdparty"
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Player Network SDK ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
mavenCentral()
google()
jcenter()
flatDir {
dirs 'libs'
}
}
}
- Follow the instructions for integrating third-party channels.
- Replace the
{placeholder}text inINTLCore.mainTemplate.gradlewith the value from the INTLConfig.ini configuration file.
android {
compileSdkVersion rootProject.ext.common.compileSdkVersion
buildToolsVersion rootProject.ext.common.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.common.minSdkVersion
targetSdkVersion rootProject.ext.common.targetSdkVersion
multiDexEnabled rootProject.ext.common.minSdkVersion < 21
manifestPlaceholders = [
"FACEBOOK_APPID" : "{INTL_FACEBOOK_APP_ID}",
"GOOGLE_APPID" : '{INTL_GOOGLE_APP_ID}',
"FACEBOOK_CLIENT_TOKEN" : "{INTL_FACEBOOK_CLIENT_TOKEN}",
'GOOGLEPGS_APPID' : '{INTL_GOOGLEPGS_APPID}',
'VK_APPID' : '{INTL_VK_APP_ID}',
'GARENA_APP_ID' : '{INTL_GARENA_APP_SDK_ASSIGN_ID}',
'QQ_APPID' : '{INTL_QQ_APP_ID}',
'GOOGLE_CLIENT_ID' : '{INTL_GOOGLE_CLIENT_KEY_ANDROID}',
'DISCORD_APP_ID' : '{INTL_DISCORD_APP_ID}',
'DISCORD_REDIRECT_SCHEME' : '{INTL_DISCORD_REDIRECT_SCHEME}',
'DISCORD_REDIRECT_HOST' : '{INTL_DISCORD_REDIRECT_HOST}',
'DISCORD_REDIRECT_PATH' : '{INTL_DISCORD_REDIRECT_PATH}',
'DMM_LOGIN_ACTIVITY_DATA_SCHEME': '{INTL_DMM_LOGIN_ACTIVITY_DATA_SCHEME}',
'WEBVIEW_TASK_AFFINITY' : '',
'VNG_GG_APP_ID' : '{INTL_VNG_GG_APP_ID}',
'VNG_GG_CLIENT_TOKEN' : '{INTL_VNG_GG_CLIENT_TOKEN}',
]
}
}
Unity 2019 and above
| File | File path |
|---|---|
| mainTemplate.gradle | Plugins/Android |
| baseProjectTemplate.gradle | Plugins/Android |
| launcherTemplate.gradle | Plugins/Android |
| INTLCore.mainTemplate.gradle | Plugins/Android/Gradle |
| INTLCore.baseProjectTemplate.gradle | Plugins/Android/Gradle |
| INTLCore.launcherTemplate.gradle | Plugins/Android/Gradle |
At least two updates exist:
- Merge your game's
mainTemplate.gradle,baseProjectTemplate.gradle, andlauncherTemplate.gradleinto the corresponding Player Network SDK Gradle files and retain the content marked by Player Network SDK.
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Player Network SDK - INTLCore ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
dependencies {
implementation "androidx.appcompat:appcompat:1.4.0-alpha03"
implementation "androidx.annotation:annotation:1.0.0"
implementation "com.google.android.gms:play-services-ads-identifier:17.0.0"
// Migrated to :app
// implementation "com.google.android.play:core:1.10.0"
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Player Network SDK - INTLCore ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Player Network SDK - INTLFacebook ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
dependencies {
implementation "androidx.annotation:annotation:1.0.0"
implementation "com.facebook.android:facebook-login:16.1.3"
implementation "com.facebook.android:facebook-share:16.1.3"
implementation "com.facebook.android:facebook-core:16.1.3"
implementation "com.facebook.android:facebook-gamingservices:16.1.3"
implementation "com.facebook.android:facebook-common:16.1.3"
implementation "com.facebook.android:facebook-applinks:16.1.3"
}
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Player Network SDK - INTLFacebook ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ Player Network SDK ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
apply from: "$rootDir/INTL.Gradle/INTLCore.mainTemplate.gradle"
// ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ Player Network SDK ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
- Follow the instructions for integrating third-party channels.
- Replace the
{placeholder}text inINTLCore.launcherTemplate.gradlewith the values from theINTLConfig.iniconfiguration file.
android {
compileSdkVersion rootProject.ext.common.compileSdkVersion
buildToolsVersion rootProject.ext.common.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.common.minSdkVersion
targetSdkVersion rootProject.ext.common.targetSdkVersion
multiDexEnabled rootProject.ext.common.minSdkVersion < 21
manifestPlaceholders = [
"FACEBOOK_APPID" : "{INTL_FACEBOOK_APP_ID}",
"FACEBOOK_CLIENT_TOKEN" : "{INTL_FACEBOOK_CLIENT_TOKEN}",
"GOOGLE_APPID" : '{INTL_GOOGLE_APP_ID}',
'GOOGLEPGS_APPID' : '{INTL_GOOGLEPGS_APPID}',
'VK_APPID' : '{INTL_VK_APP_ID}',
'GARENA_APP_ID' : '{INTL_GARENA_APP_SDK_ASSIGN_ID}',
'QQ_APPID' : '{INTL_QQ_APP_ID}',
'GOOGLE_CLIENT_ID' : '{INTL_GOOGLE_CLIENT_KEY_ANDROID}',
'DISCORD_APP_ID' : '{INTL_DISCORD_APP_ID}',
'DISCORD_REDIRECT_SCHEME' : '{INTL_DISCORD_REDIRECT_SCHEME}',
'DISCORD_REDIRECT_HOST' : '{INTL_DISCORD_REDIRECT_HOST}',
'DISCORD_REDIRECT_PATH' : '{INTL_DISCORD_REDIRECT_PATH}',
'DMM_LOGIN_ACTIVITY_DATA_SCHEME': '{INTL_DMM_LOGIN_ACTIVITY_DATA_SCHEME}',
'WEBVIEW_TASK_AFFINITY' : '',
'VNG_GG_APP_ID' : '{INTL_VNG_GG_APP_ID}',
'VNG_GG_CLIENT_TOKEN' : '{INTL_VNG_GG_CLIENT_TOKEN}',
]
}
}
4. Player Network SDK Configuration
When manually modifying the INTLConfig.ini file, please contact the Player Network support to confirm that the changes are as expected. For details, see SDK Config Instructions.
Please configure according to the instructions in INTLConfig.ini.
5. Initialize Player Network SDK
Player Network SDK must be initialized before integrating third-party channels.For more details, see Initialize SDK.
using INTL;// import INTL namespace
void InitializeINTLSDK()
{
INTLAPI.IsDebug = true; // Set SDK to Debug mode for log output, default is false
INTLAPI.InitSDK();
}
- SDK versions 1.27 and later
- SDK versions 1.24 to 1.26
- SDK versions before 1.24
Unity 2021 - Unity 6
Unity 2021 ~ Unity 2022
Unity 2018 ~ Unity 2022
Due to the submission requirements of App Store Connect stating that Xcode 15 must be used, the minimum supported iOS version is iOS 12.
To integrate Facebook from SDK V1.27 and later versions, Xcode 16 or above is needed.
If you integrate LINE, the iOS SDK needs to be updated to version 13 or above.
1. Add Player Network SDK to your project
- Extract the SDK package.
- Copy the
INTLSDKfolder to your project'sAssetsfolder. - Merge the
Pluginsfolder from Player Network SDK into your project'sPluginsfolder.
Player Network SDK package
├─INTLSDK // Player Network SDK CS scripts that offer APIs and callbacks
│ ├─Editor // Editor scripts for Player Network SDK including Player Network SDK XUPorter
│ └─Scripts // Scripts for Player Network SDK that include INTLCore and other plugin scripts
├─LevelInfinite // LI PASS APIs
├─Plugins // Plugins for Player Network SDK for various platforms
│ ├─Android
│ ├─iOS
│ ├─MacOS
│ └─Windows~
├─Symbols // Symbol table *.so files for Player Network SDK
└─UnionAdapter // UnionAdapter APIs that adapt to both MSDK and Player Network SDK
INTLSDK/Scripts/INTLCore
├─INTLSDK
│ ├─Editor
│ └─Scripts
│ ├─INTLConfig
| └─INTLCore
| ├─Editor // INTLCore PostProcess.cs / PreProcess.cs files for different platforms
| | ├─INTLCoreAndroidPostProcess.cs
| | ├─INTLCoreiOSPostProcess.cs
| | ├─INTLCoreMacOSPostProcess.cs
| | ├─INTLCoreWindowsPostProcess.cs
| | └─INTLCoreWindowsPreProcess.cs
| └─Scripts // INTLCore scripts
| ├─INTLAPI.cs // Player Network SDK APIs
| ├─INTLConfig.cs // Player Network SDK data structures
| ├─INTLDefine.cs // Player Network SDK static strings
| ├─INTLErrorCode.cs // Player Network SDK error codes
| ├─Modules
| └─Utils
├─LevelInfinite
├─Plugins
├─Symbols
└─UnionAdapter
INTLSDK/Script/INTLConfig
├─INTLSDK
│ ├─Editor
│ └─Scripts
│ ├─INTLConfig
| | └─Editor // Configuration files for Player Network SDK, PostProcess.cs files, and encryption tools
| | ├─Encrypt
| | | ├─decrypt // Decryption tool for Player Network SDK for INTLConfig.ini
| | | ├─Decrypt.exe // Decryption tool for Player Network SDK for INTLConfig.ini
| | | ├─encrypt // Encryption tool for Player Network SDK for INTLConfig.ini
| | | ├─Encrypt.exe // Encryption tool for Player Network SDK for INTLConfig.ini
| | | ├─EncryptConfig.ini // File to enable or disable encryption for INTLConfig.ini in Player Network SDK
| | | ├─INTLConfigINI.cs
| | | ├─INTLConfigINIEditor.cs
| | | └─INTLEditorTools.cs
| | ├─INTLConfigAndroidPostProcess.cs
| | ├─INTLConfigiOSPostProcess.cs
| | ├─INTLConfigMacOSPostProcess.cs
| | ├─INTLConfigSwitchPreProcess.cs
| | ├─INTLConfigWindowsPostProcess.cs
| | └─Resources // Configurations for Player Network SDK
| | ├─APASConfig.ini // Configuration file for APAS device level
| | └─INTLConfig.ini // Main configuration file for Player Network SDK
| └─INTLCore
├─LevelInfinite
└─Plugins
2. Load required permissions and plug-ins
XUPorter automatically adds dependent libraries and source code files during Xcode project export for streamlined packaging.
Player Network SDK optimizes the original version of XUPorter to avoid conflicts between the XUPorter solution and Player Network SDK solution.
- Added
INTLSDKEditornamespace to avoid naming conflicts when other components also use XUPorter. - Changed the MODS file search path.Thus, Player Network SDK XUPorter only searches for MODS files in the
INTLSDK/directory rather than redundantly adding configuration from other components. - Lifecycle was added to
UnityAppController.mm.
Player Network SDK XUPorter Solution
INTL{Plugin}Kit.projmods is the configuration file for Player Network SDK's Info.plist.Player Network SDK reads the INTL{Plugin}Kit.projmods files in the INTLSDK/Editor/XUPorter/Mods directory and adds imported bundles, frameworks, and other dependencies to Xcode.
Since each INTL{Plugin}Kit.projmods file corresponds to a plugin, the game needs to update each file according to its requirements for plugins, and replace the {placeholder} text with the value from the INTLConfig.ini configuration file.
For example, update INTLFacebookKit.projmods to obtain required configuration.
"Info.plist":{
"LSApplicationQueriesSchemes":
[
"fb",
"fb-messenger-api",
"fbshareextension",
"fbauth2",
"fb-messenger-share-api",
"fbapi"
],
"NSAppTransportSecurity":
{
"NSAllowsArbitraryLoads":true
},
"FacebookClientToken":"{INTL_FACEBOOK_CLIENT_TOKEN}",
"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLName":"Facebook",
"CFBundleURLSchemes":["fb{INTL_FACEBOOK_APP_ID}"]
}
]
}
iOS Usage Instructions
During integration, users can modify the content as needed and confirm content compliance with the legal team.If not modified, please replace INTLSample with your game's name.
According to iOS permission requirements, when applying for sensitive permissions, fill in Purpose Description when the system prompts users to provide information.
-
In
Assets/INTLSDK/Editor/XUPorter/Mods~/INTLCoreKit.projmods, the following permissions have been escalated:"NSPhotoLibraryUsageDescription"
"NSCameraUsageDescription"
"NSLocationWhenInUseUsageDescription"
"NSPhotoLibraryAddUsageDescription"
"NSMicrophoneUsageDescription"During integration, users can modify content as needed.
-
In
Assets/INTLSDK/Editor/XUPorter/Mods~/INTLADTrackingKit.projmods, the following permission has been escalated:"NSUserTrackingUsageDescription"
3) Merge privacy manifest
Version requirements: Player Network SDK V1.22 and above
Starting from Spring 2024, applications that need to be updated or uploaded to Apple App Store Connect must clearly specify the reason for use in order to demonstrate how the app uses required reason APIs (APIs for which a reason for use must be submitted).For more information, see Upcoming Third-party SDK Requirements.
For affected Player Network SDK plug-ins, manual merging is required for INTLFoundation, INTLCore, and INTLGarena. INTLGarena only needs to be configured if Garena integration is confirmed for the project.
Additionally, INTLLine is automatically integrated by Player Network SDK without extra action.
Since privacy manifests from other third-party SDKs have not been released yet, the Player Network SDK privacy manifest does not currently include the corresponding content.To view the list of plugins yet to be released, see iOS 17 Privacy Manifest.
Steps
- Locate the privacy manifest
PrivacyInfo.xcprivacyfor the required plugin within the Player Network SDK product directory.
- Unity
- Unreal Engine
| Plugin | Path |
|---|---|
| INTLFoundation | /Plugins/iOS/INTLSDK/INTLFoundation/INTLFoundation.framework/PrivacyInfo.xcprivacy |
| INTLCore | /Plugins/iOS/INTLSDK/INTLCore/INTLCore.framework/PrivacyInfo.xcprivacy |
| INTLGarena | /Plugins/iOS/INTLSDK/INTLGarena/INTLGarena.framework/PrivacyInfo.xcprivacy |
| Plugin | Path |
|---|---|
| INTLFoundation | /INTLSDK/Source/INTLFoundation/Libs/iOS/INTLFoundation/INTLFoundation.embeddedframework/INTLFoundation.framework/PrivacyInfo.xcprivacy |
| INTLCore | /INTLSDK/Source/INTLCore/Libs/iOS/INTLCore/INTLCore.embeddedframework/INTLCore.framework/PrivacyInfo.xcprivacy |
| INTLGarena | /INTLSDK/Source/INTLGarena/Libs/iOS/INTLGarena/INTLGarena.embeddedframework/INTLGarena.framework/PrivacyInfo.xcprivacy |
-
Use the 4 nodes in
PrivacyInfo.xcprivacywithin the Player Network SDK to compare with corresponding content in the game project'sPrivacyInfo.xcprivacy, and merge based on the following conditions.

-
Privacy Nutrition Label Types (NSPrivacyCollectedDataTypes)is the node describing types of data usage:
Compare eachitem'sCollected Data Type (NSPrivacyCollectedDataType), if different values exist, add them to the game project file.
If identical values exist, compareCollection Purposes (NSPrivacyCollectedDataTypePurposes), if different values exist, add them to the game project file.

-
Privacy Tracking Domains (NSPrivacyTrackingDomains)is the node for domain tracking list:
Compare each related node, if different values exist, add them to the game project file. -
Privacy Tracking Enabled (NSPrivacyTracking)describes whether the App Tracking Transparency feature is enabled:
Compare each node, if the Player Network SDK's privacy manifest's value isYES, modify the game project file. -
Privacy Accessed API Types (NSPrivacyAccessedAPITypes)is the node describing types of interface usage:
Compare eachitem'sPrivacy Accessed API Type (NSPrivacyAccessedAPIType), if different values exist, add them to the game project file.
If identical values exist, comparePrivacy Accessed API Reasons (NSPrivacyAccessedAPITypeReasons), if different values exist, add them to the game project file.

-
-
Generate a privacy report via Xcode 15 to verify it meets expectations.

4) Player Network SDK Configuration
When manually modifying the INTLConfig.ini file, please contact the Player Network support to confirm that the changes are as expected. For details, see SDK Config Instructions.
Please configure according to the instructions in INTLConfig.ini.
5. Initialize Player Network SDK
Player Network SDK must be initialized before integrating third-party channels.For more details, see Initialize SDK.
using INTL;// import INTL namespace
void InitializeINTLSDK()
{
INTLAPI.IsDebug = true; // Set SDK to Debug mode for log output, default is false
INTLAPI.InitSDK();
}
- SDK versions 1.27 and later
- SDK versions 1.24 to 1.26
- SDK versions before 1.24
Unity 2021 - Unity 6
Unity 2021 ~ Unity 2022
Unity 2018 ~ Unity 2022
Supports 64-bit Windows 7, Windows 10, Windows 11 operating systems.
Due to the characteristics of the Windows platform, the game's installation directory cannot contain an English character semicolon (;), otherwise the game will not be able to find the necessary DLL, resulting in game failure.
If the Windows platform integrates Google, Facebook, LINE, Apple, and other channels, WebView needs to be introduced.
Recommended to run based on the Microsoft Visual C++ Redistributable 2015-2022 compiler.
-
Windows 7:
- Install Microsoft Visual C++ Redistributable packages and add the command
VC_redist.x64.exe /install /quiet /norestartto the installation script. - Install Windows 7 Security Update (KB3063858).
- Install Microsoft Visual C++ Redistributable packages and add the command
-
Windows 8 and Windows 8.1:
Install Microsoft Visual C++ Redistributable packages and add the command
VC_redist.x64.exe /install /quiet /norestartto the installation script.
1. Add Player Network SDK to your project
- Extract the SDK package.
- Copy the
INTLSDKfolder to your project'sAssetsfolder. - Merge the
Pluginsfolder from Player Network SDK into your project'sPluginsfolder.
Player Network SDK package
├─INTLSDK // Player Network SDK CS scripts that offer APIs and callbacks
│ ├─Editor // Editor scripts for Player Network SDK including Player Network SDK XUPorter
│ └─Scripts // Scripts for Player Network SDK that include INTLCore and other plugin scripts
├─LevelInfinite // LI PASS APIs
├─Plugins // Plugins for Player Network SDK for various platforms
│ ├─Android
│ ├─iOS
│ ├─MacOS
│ └─Windows~
├─Symbols // Symbol table *.so files for Player Network SDK
└─UnionAdapter // UnionAdapter APIs that adapt to both MSDK and Player Network SDK
INTLSDK/Scripts/INTLCore
├─INTLSDK
│ ├─Editor
│ └─Scripts
│ ├─INTLConfig
| └─INTLCore
| ├─Editor // INTLCore PostProcess.cs / PreProcess.cs files for different platforms
| | ├─INTLCoreAndroidPostProcess.cs
| | ├─INTLCoreiOSPostProcess.cs
| | ├─INTLCoreMacOSPostProcess.cs
| | ├─INTLCoreWindowsPostProcess.cs
| | └─INTLCoreWindowsPreProcess.cs
| └─Scripts // INTLCore scripts
| ├─INTLAPI.cs // Player Network SDK APIs
| ├─INTLConfig.cs // Player Network SDK data structures
| ├─INTLDefine.cs // Player Network SDK static strings
| ├─INTLErrorCode.cs // Player Network SDK error codes
| ├─Modules
| └─Utils
├─LevelInfinite
├─Plugins
├─Symbols
└─UnionAdapter
INTLSDK/Script/INTLConfig
├─INTLSDK
│ ├─Editor
│ └─Scripts
│ ├─INTLConfig
| | └─Editor // Configuration files for Player Network SDK, PostProcess.cs files, and encryption tools
| | ├─Encrypt
| | | ├─decrypt // Decryption tool for Player Network SDK for INTLConfig.ini
| | | ├─Decrypt.exe // Decryption tool for Player Network SDK for INTLConfig.ini
| | | ├─encrypt // Encryption tool for Player Network SDK for INTLConfig.ini
| | | ├─Encrypt.exe // Encryption tool for Player Network SDK for INTLConfig.ini
| | | ├─EncryptConfig.ini // File to enable or disable encryption for INTLConfig.ini in Player Network SDK
| | | ├─INTLConfigINI.cs
| | | ├─INTLConfigINIEditor.cs
| | | └─INTLEditorTools.cs
| | ├─INTLConfigAndroidPostProcess.cs
| | ├─INTLConfigiOSPostProcess.cs
| | ├─INTLConfigMacOSPostProcess.cs
| | ├─INTLConfigSwitchPreProcess.cs
| | ├─INTLConfigWindowsPostProcess.cs
| | └─Resources // Configurations for Player Network SDK
| | ├─APASConfig.ini // Configuration file for APAS device level
| | └─INTLConfig.ini // Main configuration file for Player Network SDK
| └─INTLCore
├─LevelInfinite
└─Plugins
2. Change cache directory
By default, the cache directory generated by Player Network SDK PC users and applications is:
C:/ProgramData/INTLC:/Users/{name}/AppData/Local/INTL/local/INTL.
Before calling InitSDK, the game developer must set the cache directory.For more information, see Change User Data Folder Directory API.
// For example, game id is 11, and the game application name is INTLSDKDemo.
// Then the game invokes the interface like this:
INTLAPI.SetSDKDefaultUserStorage("D:\\game_data\\");
// The data cache path for Player Network SDK will be D:\game_data\11\INTLSDKDemo\.
3. Player Network SDK Configuration
When manually modifying the INTLConfig.ini file, please contact the Player Network support to confirm that the changes are as expected. For details, see SDK Config Instructions.
Please configure according to the instructions in INTLConfig.ini.
4. Initialize Player Network SDK
Player Network SDK must be initialized before integrating third-party channels.For more details, see Initialize SDK.
using INTL;// import INTL namespace
void InitializeINTLSDK()
{
INTLAPI.IsDebug = true; // Set SDK to Debug mode for log output, default is false
INTLAPI.InitSDK();
}
To release the global state of Player Network SDK, it is recommended to shut down the SDK at the end of the application lifecycle.
For more details on the dedicated Windows APIs mentioned above, see ShutDown.
Step 2: Verify successful Player Network SDK integration
- Modify the configuration under the
INTL Lognode in the INTLConfig.ini file.
[INTL Log]
LOG_LEVEL = 1
LOG_ENCRYPT_ENABLE = 0
LOG_COMPRESS_ENABLE = 0
LOG_CONSOLE_OUTPUT_ENABLE = 1
LOG_FILE_OUTPUT_ENABLE = 1
- Run the program. If the log shows
Init INTL SDK success., integration is successful.