开发
开发
选择平台

Meta Quest 应用的用户屏蔽功能

This is a Platform SDK feature requiring Data Use Checkup
如要使用此功能或任何其他平台 SDK 功能,您需要完成数据使用情况检查 (DUC)。DUC 可确保您遵守开发者政策。这需要您团队的管理员证明您对用户数据的使用符合平台守则。在应用审核团队审核并批准您的 DUC 之前,平台功能仅供测试用户使用。

屏蔽和取消屏蔽用户

屏蔽是用户在多人游戏和社交体验中需要的核心安全功能。通过这个平台功能,开发者可以访问用户已屏蔽的用户,并允许用户直接在他们的应用中进行屏蔽。
用户屏蔽功能的流程可以在对应用体验尽量不会造成干扰的情况下创建新的屏蔽操作。在多人游戏或社交环境中,当用户遇到其他违规玩家时,这个功能就非常实用。此流程让您可以提示用户屏蔽特定的其他用户,而用户可以选择确认或取消屏蔽,用户随后会被立即带回您的应用中。之后,您可以访问这些屏蔽数据,以便在您的应用中遵守并应用用户的所有屏蔽设置。

启动用户屏蔽流程

Users.LaunchBlockFlow(UInt64 userID)
输入:UInt64 userID:观众将要对之发起屏蔽流程请求的用户编号。
此方法通过深度链接将观众引导到一个模态对话框,以指定要屏蔽的用户。在模态对话框中,观众可以选择屏蔽来屏蔽用户并返回到应用中。选择取消,观众则会返回应用,而不实施任何屏蔽操作。

检查结果

在调用上述方法之后,您可以使用 GetLaunchBlockFlowResult() 来获取观众在模态对话框中的操作结果。请参阅下面的代码示例 1,了解如何处理屏蔽回调消息。
  • LaunchBlockFlowResult.GetDidBlock 用来检查观众是否在模态对话框中选择了“Block”(屏蔽)。
  • LaunchBlockFlowResult.GetDidCancel 用来检查观众是否在模态对话框中取消操作或选择了“Back”(返回)。
请参阅下面的表格 1,了解如何使用这些值的示例。

表格 1:屏蔽结果反馈示例

情况描述结果反馈 (LaunchBlockFlowResult)
成功屏蔽
用户将看到一个对话框,在其中可以选择“Block”(屏蔽)或“Cancel”(取消)。用户选择“Block”(屏蔽),系统成功执行屏蔽。
GetDidBlock:true;GetDidCancel:false
用户取消
用户将看到一个对话框,在其中可以选择屏蔽取消。如果用户选择取消,则让观众返回应用。
GetDidBlock:false;GetDidCancel:true
观众尝试屏蔽之前曾屏蔽过的用户
观众会收到一条消息,告知他们当前的情况,并询问是否要取消对目标用户的屏蔽。选择返回,会让观众返回其应用。
GetDidBlock:false;GetDidCancel:true
观众尝试屏蔽自己
观众会收到一条消息,表示不支持此操作。选择返回,会让观众返回其应用。
GetDidBlock:false;GetDidCancel:true
由于其他原因,屏蔽操作无法发送。
用户会收到如下消息:“无法屏蔽。请检查连接并重试。”选择返回,会让观众返回应用。
GetDidBlock:false;GetDidCancel:true

启动取消屏蔽用户流程

Users.LaunchUnblockFlow(UInt64 userID)
输入:UInt64 userID:观众将要对之启动取消屏蔽流程请求的用户编号。
此方法通过深度链接将观众引导到一个模态对话框,以指定要取消屏蔽的用户。在模态对话框中,观众可以选择取消屏蔽来取消屏蔽用户并返回到应用中。选择取消,观众则会返回应用,而不实施任何取消屏蔽操作。

检查结果

在调用上述方法之后,您可以使用 GetLaunchUnblockFlowResult() 来获取观众在模态对话框中的操作结果。请参阅下面的代码示例 1,了解如何处理屏蔽/取消屏蔽回调消息。
  • LaunchUnblockFlowResult.GetDidBlock 用来检查观众是否在模态对话框中选择了“Unblock”(取消屏蔽)。
  • LaunchUnblockFlowResult.GetDidCancel 用来检查观众是否在模态对话框中取消操作或选择了“Back”(返回)。

代码示例 1:处理屏蔽回调消息

using Oculus.Platform;

Users.LaunchBlockFlow(UInt64 userID).OnComplete(OnBlockUser);
...

void OnBlockUser(Message<Models.LaunchBlockFlowResult> message) {
  if (message.IsError) {
    Debug.Log("Error when trying to block the user");
    Debug.LogError(message.Data);
  } else {
    Debug.Log("Got result: DidBlock = " + message.Data.DidBlock + " DidCancel = " + message.Data.DidCancel);
  }
}

...
Users.LaunchUnblockFlow(UInt64 userID).OnComplete(OnUnblockUser);
...

void OnUnblockUser(Message<Models.LaunchUnblockFlowResult> message) {
  if (message.IsError) {
    Debug.Log("Error when trying to unblock the user");
    Debug.LogError(message.Data);
  } else {
    Debug.Log("Got result: DidBlock = " + message.Data.DidUnblock + " DidCancel = " + message.Data.DidCancel);
  }
}

检索被屏蔽的用户名单

要检索被屏蔽的用户名单,请使用方法:Users.GetBlockedUsers()。此方法会检索当前用户的屏蔽用户编号数组,而这些屏蔽用户同样有权使用您的应用。请参阅参见下面的代码示例 2,了解如何记录被屏蔽的用户数据。
如果返回大量的值,您可能需要调用 Users.GetNextBlockedUserArrayPage() 并对数据进行分页。

代码示例 2:记录被屏蔽的用户编号

using Oculus.Platform;

    void GetBlockedUsers()
    {
        Users.GetBlockedUsers().OnComplete(OnGetBlockedUsers);
    }

    void OnGetBlockedUsers(Message<Models.BlockedUserList> message)
    {
        Debug.Log("EXTRACTING BLOCKED USER DATA");
        if (message.IsError)
        {
            Debug.Log("Could not get the list of users blocked!");
            Debug.LogError(message.Data);
        }
        else
        {
            foreach (Models.BlockedUser user in message.GetBlockedUserList())
            {
                Debug.Log("Blocked User: " + user.Id);
            }
        }
    }