跳到主要内容

合规信息的回调(ComplianceResultObserver)

如果您使用的是 Unreal Engine,请参见 Unreal Engine SDK 的 ComplianceResultObserver

注册 Player Network SDK 合规模块的回调,游戏需要注册回调函数进行处理。更多关于回调数据结构,请参见 ComplianceResult

注意

强烈建议游戏在应用启动函数中进行注册。

函数定义

// 增加 INTLComplianceResult 回调
public static void AddComplianceResultObserver(OnINTLResultHandler<INTLComplianceResult> callback);
// 移除 INTLComplianceResult 回调
public static void RemoveComplianceResultObserver(OnINTLResultHandler<INTLComplianceResult> callback);

代码示例

// Add callbacks
public void AddComplianceObserver()
{
INTLAPI.AddComplianceResultObserver(OnComplianceResultEvent);
}

// Remove callbacks
public void RemoveComplianceObserver()
{
INTLAPI.RemoveComplianceResultObserver(OnComplianceResultEvent);
}

// Process the INTLComplianceResult callback
public void OnComplianceResultEvent(INTLComplianceResult complianceRet)
{
string methodTag = "";
string content = "";

if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_SET_USER_PROFILE)
{
methodTag = "SetUserProfile";
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_QUERY_USER_STATUS) // 1. Query user information
{
handleQueryUserInfo(complianceRet);
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_SET_ADULTHOOD) // 2. Set adult status
{
methodTag = "SetAdulthood";
content = complianceRet.RetCode == INTLErrorCode.SUCCESS ? "Set adult status successfully" : "Failed to set adult status";

m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_SET_EU_AGREE_STATUS) // 3. Set EU agreement
{
methodTag = "SetEUAgreeStatus";

m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_SEND_EMAIL) // 4. Send email
{
methodTag = "SendEmail";

m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_COMMIT_BIRTHDAY) // 5. Submit birthday
{
handleCommitBirthday(complianceRet);
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_VERIFY_CREDIT_CARD) // 6. Credit card authentication
{
methodTag = "VerifyCreditCard";
if (complianceRet.ParentCertificateStatus == 1)
{
content = "Credit card verification passed, you can enter the game";
}

if (complianceRet.ParentCertificateStatus == 11)
{
content = "Credit card verification status failed";
}

m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
}
else if (complianceRet.MethodId == (int)INTLMethodID.INTL_COMPLIANCE_QUERY_EEA) //7. Whether it is EEA Region
{
methodTag = "QueryIsEEA";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine("Is it an EEA country :" + complianceRet.IsEEA);
}
}

private void handleQueryUserInfo(INTLComplianceResult complianceRet)
{
string methodTag = "QueryUserStatus";
string content = "";

if (complianceRet.RetCode != INTLErrorCode.SUCCESS)
{
content = "Request error";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.AdultStatus == 1)
{
content = "User is adult, can proceed directly to game";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.CertificateType == 0)
{
content = "No verification required, can proceed directly to game";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.AdultStatus == 0)
{
content = "Unknown player adult status, game must obtain the player's birth month and year and call CommitBirthday to submit user age information";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

//Start minor logic
switch (complianceRet.ParentCertificateStatus)
{
case -1: // Guardian verification refused
{
int current_ts = 0;
Int32.TryParse(complianceRet.TS, out current_ts);
int status_expiration = 0;
Int32.TryParse(complianceRet.ParentCertificateStatusExpiration, out status_expiration);

int time_left = status_expiration - current_ts;
int days = (int)time_left / (3600 * 24);
time_left = time_left % (3600 * 24);
int hours = (int)time_left / 3600;
time_left = time_left % 3600;
int mins = (int)time_left / 60;
content = "Minor user failed guardian verification, re-verification is allowed for your account in " + days + "d" + hours + "h" + mins + "m";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
break;
}
case 0: // No verification
{
content = "Minor player without verification, game must obtain player's birth month and year and call CommitBirthday to submit user age information";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
break;
}
case 1: // Guardian verification successful
{
int current_ts = 0;
Int32.TryParse(complianceRet.TS, out current_ts);
int status_expiration = 0;
Int32.TryParse(complianceRet.AdultStatusExpiration, out status_expiration);

if (status_expiration <= current_ts)
{
content = "Verification more than E days ago, display pop-up to ask if the player is an adult.If the user reports that he or she is an adult, call SetAdulthood(kAgeStautsAdult); If not, directly proceed to game";
}
else
{
content = "Verification less than E days ago, proceed directly to game";
}
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}
case 10:
{
content = "Verification in progress, only for email verification.Pop up the email input window to resend email";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}
default:
{
content = "Illegal status; this should not occur, check the log";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
break;
}
}
}

private void handleCommitBirthday(INTLComplianceResult complianceRet)
{
string methodTag = "CommitBirthday";
string content = "";

if (complianceRet.RetCode != INTLErrorCode.SUCCESS)
{
content = "Request error";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.AdultStatus == 1)
{
content = "User is adult, proceed directly to game";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.AdultStatus == -2)
{
content = "User age below minimum age of game rating, cannot access game";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.AdultStatus == 0)
{
content = "Adult status position.This status should not occur, check the log and feedback";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.ParentCertificateStatus == 1)
{
content = "Credit card verification successful, game access permitted";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

if (complianceRet.ParentCertificateStatus == 11)
{
content = "Credit card verification failed";
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
return;
}

//Minor, but verification is required
if (complianceRet.CertificateType == 0)
{
content = "Proceed directly to game without verification (default method)";
}
else if (complianceRet.CertificateType == 1)
{
content = "Self-verification (this method is not currently available)";
}
else if (complianceRet.CertificateType == 2)
{
content = "Credit card verification, Player Network SDK automatically implements the Midas logic";
}
else if (complianceRet.CertificateType == 3)
{
content = "Email verification, pop up email input window and call the SendEmail interface";
}
m_sample.ShowLogInNewLine(methodTag + Tools.Instance.GetRetString(complianceRet));
m_sample.ShowLogInNewLine(content);
}