本指南适用于希望通过 Unity 接入防沉迷功能的发布商。
借助防沉迷 Unity 插件,Unity 开发者无需编写 Java 或 Objective-C 代码,即可轻松地在 Android 和 iOS 应用上实现防沉迷的功能。
该插件提供了一个 C# 界面,用于 Unity 项目中 C# 脚本使用防沉迷功能。
请通过如下链接下载该插件的 Unity 软件包,或在 GitHub 上查看其代码。
在 Unity 编辑器中打开您的项目,然后依次选择 Assets > Import Package > Custom Package,并找到您下载的 AntiAddictionSystem.unitypackage 文件。
确保选择所有文件,然后点击 Import。
防沉迷 Unity 插件随 Unity Play 服务解析器库一起发布。 此库旨在供需要访问 Android 特定库(例如 AAR)或 iOS CocoaPods 的所有 Unity 插件使用。它为 Unity 插件提供了声明依赖项的功能,然后依赖项会被自动解析并复制到 Unity 项目中。
请按照下列步骤操作,确保您的项目包含防沉迷 SDK。
您无需执行其他步骤即可将防沉迷 SDK 加入 Unity 项目中。
注意:iOS 依赖项的标识是通过 CocoaPods 完成的,而 CocoaPods 是构建过程完成后的一个运行步骤。
在 Unity 编辑器中,依次选择 Assets > Play Services Resolver > Android Resolver > Resolve。
Unity Play 服务解析器库会将声明的依赖项复制到 Unity 应用的 Assets/Plugins/Android 目录中。
注意:防沉迷 Unity 插件依赖项位于 Assets/AntiAddictionSystem/Editor/AntiAddictionSystemDependencies.xml 中
请在info.plist中添加如下参数。 参数获取请联系产品。
<key>gamecode</key>
<string>123</string>
<key>zchannelid</key>
<string>123</string>
<key>zkey</key>
<string>3756116173</string>
请修改Assets/Plugins/Android/assets/ZplayConfig.xml文件中的参数

提示:ZplayConfig.xml文件中的GameID,ChannelID,Zplay_SDK_KEY参数,请联系掌游产品获取
using System;
using UnityEngine;
using AntiAddictionSystem.Api;
using UnityEngine.UI;
public class AntiAddictionDemoScript : MonoBehaviour
{
AntiAddictionSDK antiAddictionSDK;
void Start()
{
antiAddictionSDK = new AntiAddictionSDK();
antiAddictionSDK.OnPrivacyPolicyShown += HandlePrivacyPolicyShown;
antiAddictionSDK.OnUserAgreesToPrivacyPolicy += HandleUserAgreesToPrivacyPolicy;
antiAddictionSDK.OnLoginSuccess += HandleLoginSuccess;
antiAddictionSDK.OnLoginHasBeenShown += HandleLoginHasBeenShown;
antiAddictionSDK.OnLoginHasBeenDismissed += HandleLoginHasBeenDismissed;
antiAddictionSDK.OnLoginFail += HandleLoginFail;
antiAddictionSDK.OnSwitch += HandleSwitch;
antiAddictionSDK.OnUserAuthVcHasBeenShown += HandleUserAuthVcHasBeenShown;
antiAddictionSDK.OnUserAuthSuccess += HandleUserAuthSuccess;
antiAddictionSDK.OnWarningHasBeenShown += HandleWarningHasBeenShown;
antiAddictionSDK.OnUserClickLoginButton += HandleUserClickLoginButton;
antiAddictionSDK.OnUserClickQuitButton += HandleUserClickQuitButton;
antiAddictionSDK.OnUserClickConfirmButton += HandleUserClickConfirmButton;
antiAddictionSDK.OnLoginFail += HandleLoginFail;
antiAddictionSDK.OnLogoutCallback += HandleLogoutCallback;
antiAddictionSDK.OnCanPay += HandleCanPay;
antiAddictionSDK.OnProhibitPay += HandleProhibitPay;
}
#region AntiAddiction callback handlers
//隐私协议回调
//隐私协议窗口展示接口
public void HandlePrivacyPolicyShown(object sender, EventArgs args)
{
print("AntiAddiction---HandlePrivacyPolicyShown");
}
//用户同意隐私协议
public void HandleUserAgreesToPrivacyPolicy(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserAgreesToPrivacyPolicy");
}
//登录接口
//登录界面展示回调
public void HandleLoginHasBeenShown(object sender, EventArgs args)
{
print("AntiAddiction---HandleLoginHasBeenShown");
}
//登录界面关闭回调
public void HandleLoginHasBeenDismissed(object sender, EventArgs args)
{
print("AntiAddiction---HandleLoginHasBeenDismissed");
}
//登录成功回调
public void HandleLoginSuccess(object sender, LoginSuccessEventArgs args)
{
String zplayId = args.Message;
print("AntiAddiction---HandleLoginSuccess: " + zplayId);
}
//登录失败回调
public void HandleLoginFail(object sender, EventArgs args)
{
print("AntiAddiction---HandleLoginFail");
}
//用户点击切换账号按钮,请引导用户切换账号
public void HandleSwitch(object sender, EventArgs args)
{
print("AntiAddiction---HandleSwitch");
}
//实名认证回调
//实名认证界面展示回调
public void HandleUserAuthVcHasBeenShown(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserAuthVcHasBeenShown");
}
//实名认证通过回调
public void HandleUserAuthSuccess(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserAuthSuccess");
}
//防沉迷SDK提示界面回调
//当提示界面展示时,应用需通过监听下列回调,进行应用逻辑的调整
//以下会介绍每个回调使用场景
//当触发防沉迷逻辑时,防沉迷SDK会有弹窗提示,任意弹窗显示时应用都会收到此回调
public void HandleWarningHasBeenShown(object sender, EventArgs args)
{
print("AntiAddiction---HandleWarningHasBeenShown");
}
//未成年用户游戏时长达上限,用户退出游戏回调
//使用场景:
//当未成年用户在游戏中时长已到,防沉迷SDK会弹窗提示用户退出游戏,用户点击弹窗上退出游戏按钮时,应用会收到此回调
//当用户点击退出游戏按钮后,防沉迷SDK会退出游戏,请收到此回调后进行数据保存等相关处理
public void HandleUserClickQuitButton(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserClickQuitButton");
}
//未成年用户不可支付,用户点击弹窗“确定”按钮回调
//使用场景:
//当用户发起支付,支付不被允许时,防沉迷SDK会弹出弹窗提示用户不可支付,并且有确定按钮
//当用户点击弹窗上的确定按钮时,应用会收到此回调,防沉迷SDK会关闭弹窗回到应用
public void HandleUserClickConfirmButton(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserClickConfirmButton");
}
//用户点击弹窗“登录”按钮回调
//使用场景:
//按照规定,用户未登录时不可发起支付,因此用户未登录状态下支付时,防沉迷SDK会弹出弹窗提示用户登录,当用户点击登录按钮后应用会收到此回调
//收到此回调后游戏需引导用户进行登录,若用户选择不登录,仍旧可以继续游戏
public void HandleUserClickLoginButtonInPayment(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserClickLoginButtonInPayment");
}
//游客游戏时长达上限回调
//使用场景:
//若用户未登录,游戏时长已到时,应用会接收到此回调
//防沉迷SDK会弹出弹窗,让用户去选择登录或是退出游戏,登录后才可继续游戏
//游戏需要引导用户进行登录,用户不登录则不可继续游戏的逻辑。
public void HandleUserClickLoginButtonInNoTimeLeft(object sender, EventArgs args)
{
print("AntiAddiction---HandleUserClickLoginButtonInNoTimeLeft");
}
//退出登录接口回调
//使用场景:当游戏有退出登录或切换账号功能时,当用户退出当前登录账号时应用会收到此回调
public void HandleLogoutCallback(object sender, EventArgs args)
{
print("AntiAddiction---HandleLogoutCallback");
}
//支付检测接口回调
//允许支付回调
public void HandleCanPay(object sender, EventArgs args)
{
print("AntiAddiction---HandleCanPay");
}
//不允许支付
//使用场景:当用户单笔支付金额或当月累计支付金额超过限制时,应用会收到此弹窗
public void HandleProhibitPay(object sender, EventArgs args)
{
print("AntiAddiction---HandleProhibitPay");
}
#endregion
}在APP启动时调用展示隐私政策接口(iOS应用需确保此时根视图已加载完成)。
此接口为防沉迷逻辑入口,请确保每次启动应用都调用此方法。 您无需判断用户是否已经同意隐私政策,SDK将自动判断。
if (antiAddictionSDK != null)
{
antiAddictionSDK.ShowPrivacyPolicyView();
}注:若您的APP无登录功能、无登录界面,使用防沉迷SDK的登录功能可调用此接口。
登录界面由SDK实现,您只需监听HandleLoginSuccess(),HandleLoginFail(),判断用户是否登录成功,进而执行应用逻辑。
if (antiAddictionSDK != null)
{
antiAddictionSDK.ShowLoginViewController();
}注:若您的APP有登录页面,只需使用我方登录接口,可调用此接口
应用如果使用游戏自己设计的登录界面,可以将登录界面中用户输入的账号密码传给防沉迷SDK,使用下面的接口进行登录。
您可监听HandleLoginSuccess(),HandleLoginFail(),判断用户是否登录成功。
if (antiAddictionSDK != null)
{
//username:账号
//password:密码
antiAddictionSDK.LoginWithUserName(username, password);
}注:若您的APP已经接入微信登录、QQ登录等非ZPLAY登录,需调用此接口
将其他登录平台返回的用户唯一标识通过以下接口传给防沉迷SDK,以此进行登录,您可监听HandleLoginSuccess(),HandleLoginFail(),判断用户是否登录成功。
if (antiAddictionSDK != null)
{
//token:三方平台返回的唯一标识
//otherID:三方平台返回的用户Id,没有的话传token
//platformName:平台名称,请联系掌游产品获取
antiAddictionSDK.LoginWithPlatformToken(token, otherID, platformName);
}若您使用Zplay封装的三方登录SDK,在获取到了登录成功之后的zplayId,请使用下面的接口进行登录,您可监听HandleLoginSuccess(),HandleLoginFail(),判断用户是否登录成功。
if (antiAddictionSDK != null)
{
//zplayID:Zplay封装的登录SDK返回的zplayID
antiAddictionSDK.LoginWithZplayID(zplayID);
}若用户按照上述登录流程登录后,无需调用此方法,防沉迷SDK会自行处理。
若用户进入游戏未登录时会默认进入游客模式,此时您需要用户进行实名认证时请调用以下接口
if (antiAddictionSDK != null)
{
antiAddictionSDK.ShowUserAuthenticationViewController();
}若您的APP在用户登录后提供退出登录或切换账号的功能,在用户退出登录时需调用此接口
if (antiAddictionSDK != null)
{
antiAddictionSDK.LoginOut();
}根据国家规定,对未成年人在游戏中的单笔付费金额和每月累计付费金额都有限制,因此在用户发起支付时需要调用是否允许支付接口,用户支付成功后需要调用用户支付成功上报接口。
用户支付之前,调用此接口检测,返回可支付后才可发起支付。
您可监听HandleCanPay(),HandleProhibitPay(),判断用户是否可以支付。
if (antiAddictionSDK != null)
{
//payNumber:用户本次支付的金额,单位分
antiAddictionSDK.CheckNumberLimitBeforePayment(payNumber);
}用户支付成功后,请通过以下接口将用户的支付金额传给防沉迷SDK。
if (antiAddictionSDK != null)
{
//payNumber:用户本次支付成功的金额,单位分
antiAddictionSDK.ReportNumberAfterPayment(payNumber);
}注:在Android中,7.1及7.2为必须调用接口,7.3及7.4为非必须调用接口;在iOS中,以下接口均为非必须调用接口
此接口仅适用于Android,iOS平台无需调用。
当Android用户按home键,将游戏退出到后台时,请务必调用下面的接口
重要提示: 游戏退到后台接口必须调用,不调用会导致防沉迷SDK计算游戏时长错误if (antiAddictionSDK != null)
{
antiAddictionSDK.GameOnPause();
}此接口仅适用于Android,iOS平台无需调用。
当Android用户将游戏恢复到前台时,请务必调用下面的接口
重要提示: 游戏恢复前台接口必须调用,不调用会导致防沉迷SDK计算游戏时长错误if (antiAddictionSDK != null)
{
antiAddictionSDK.GameOnResume();
}请使用下面的接口获取当前用户的登录状态
if (antiAddictionSDK != null)
{
// 获取当前用户登录状态
// 0: 未登录
// 1: 游客
// 2: 正式用户
string loginStatus = antiAddictionSDK.GetUserLoginStatus();
}获取当前用户的实名认证身份
if (antiAddictionSDK != null)
{
// 获取用户的认证身份
// 0: 未知
// 1:已成年
// 2: 未成年
string userAuthenticationIdentity = antiAddictionSDK.GetUserAuthenticationIdentity() + "";
}

