You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity游戏中PlayFab不雅昵称过滤失效问题及解决方案咨询

PlayFab昵称过滤失效的解决方案

一、PlayFab自动过滤的正确配置

你的代码逻辑本身没问题,ProfaneDisplayName错误未触发的核心原因是PlayFab后台未开启并配置正确的违禁词过滤规则,操作步骤如下:

  • 登录PlayFab开发者后台,进入对应游戏Title
  • 导航到【Content】→【Profane Word Filter】页面
    1. 勾选启用「Enable Profane Word Filter」
    2. 在「Filter Settings」中选择过滤级别(如Strict、Moderate),或添加自定义违禁词到「Custom Profane Words」列表
    3. 关键设置:将「Action」选项改为Reject(拒绝包含违禁词的请求)——只有设置为Reject时,调用UpdateUserTitleDisplayName才会返回ProfaneDisplayName错误码,若选Replace或Tag仅会替换/标记内容,不会触发错误
  • 保存配置后,等待5-10分钟让设置生效,再测试昵称过滤

二、手动过滤解决方案(备用/增强)

如果PlayFab自动过滤不符合需求,可在本地实现前置过滤,减少API请求并提升用户体验:

1. 基础违禁词匹配

实现本地检查函数,提前拦截敏感内容:

private bool IsDisplayNameProfane(string displayName)
{
    // 违禁词列表建议从配置文件/远程配置加载,方便后续更新
    string[] profaneWords = { "违禁词1", "违禁词2", "变体敏感词" };
    string lowerName = displayName.ToLower();
    
    foreach (var word in profaneWords)
    {
        if (lowerName.Contains(word.ToLower()))
        {
            return true;
        }
    }
    return false;
}

调用时先做本地校验:

private void SetDisplayName(string name)
{
    if (IsDisplayNameProfane(name))
    {
        Debug.LogError("Name contains inappropriate content.");
        return;
    }
    
    // 原有PlayFab API调用逻辑
    var request = new UpdateUserTitleDisplayNameRequest
    {
        DisplayName = name
    };

    PlayFabClientAPI.UpdateUserTitleDisplayName(request, (result) =>
    {
        Debug.Log("Display name set to: " + result.DisplayName);
        namePanel.SetActive(false);
        AutoLogin(result.DisplayName);
    }, (error) =>
    {
        if (error.Error == PlayFabErrorCode.NameNotAvailable)
        {
            Debug.LogError("Name already taken. Please choose another one.");
        }
        else if (error.Error == PlayFabErrorCode.ProfaneDisplayName)
        {
            Debug.LogError("Name contains inappropriate content.");
        }
        else
        {
            Debug.LogError("Failed to set display name: " + error.GenerateErrorReport());
        }
    });
}

2. 增强过滤(处理变体敏感词)

针对用符号、同音字替换的敏感词,可使用正则表达式匹配:

private bool IsDisplayNameProfaneAdvanced(string displayName)
{
    // 示例规则:匹配"bad"的变体,如b@d、b*ad、bAd等
    string pattern = @"(b[*@#]d|b[aA]d|bad)";
    return Regex.IsMatch(displayName, pattern, RegexOptions.IgnoreCase);
}

注意事项

  • 本地违禁词列表建议通过PlayFab Remote Config加载,无需重新打包即可更新敏感词库
  • 本地过滤仅作前置校验,仍需保留PlayFab后端过滤,防止绕过本地检查的恶意请求

内容的提问来源于stack exchange,提问作者Alex Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 06:30:56