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

Unity&PlayFab向离线玩家发送好友请求报错问题求助

解决PlayFab离线好友请求保存失败问题

错误原因

你使用的PlayFabClientAPI.UpdateUserData属于客户端API,只能修改当前登录玩家自身的数据,对应的客户端版UpdateUserDataRequest确实没有PlayFabId参数。要修改离线玩家(其他玩家)的用户数据,必须使用PlayFab的Server API。

修改方案

  1. 切换到Server API:使用PlayFabServerAPI.UpdateUserData,它对应的请求类包含PlayFabId参数,可指定目标玩家ID。
  2. 优化数据结构:避免用玩家显示名当键(可能重名),改用发送方的PlayFab ID作为唯一标识,同时存储显示名和请求状态。
  3. 注意安全:Server API需要Server密钥,禁止在客户端直接暴露密钥,建议通过自己的后端服务中转调用,或在专用服务器逻辑中执行。

修改后的完整代码

// 建议在服务器端/后端服务中执行此方法,避免客户端暴露Server密钥
public void SaveFriendRequest(string targetPlayerId, string senderPlayFabId, string senderDisplayName)
{
    // 用发送方PlayFabID作为键,防止重名覆盖,存储显示名+请求状态
    var friendRequestData = new Dictionary<string, string>
    {
        { $"FriendReq_{senderPlayFabId}", $"{senderDisplayName}|pending" }
    };

    var updateRequest = new PlayFab.ServerModels.UpdateUserDataRequest
    {
        PlayFabId = targetPlayerId,
        Data = friendRequestData,
        Permission = PlayFab.ServerModels.UserDataPermission.Public // 设为Public方便目标玩家客户端读取
    };

    PlayFabServerAPI.UpdateUserData(updateRequest, OnSaveSuccess, OnSaveFailure);
}

// 保存成功回调
private void OnSaveSuccess(PlayFab.ServerModels.UpdateUserDataResult result)
{
    Debug.Log("好友请求已成功保存至目标玩家数据");
}

// 保存失败回调
private void OnSaveFailure(PlayFabError error)
{
    Debug.LogError($"保存好友请求失败:{error.ErrorMessage}(错误码:{error.ErrorCode})");
}

额外说明

  • 读取好友请求:目标玩家登录后,可通过PlayFabClientAPI.GetUserData读取自己的Public数据,解析所有以FriendReq_开头的键,获取待处理的好友请求。
  • 权限选择:如果不想让其他玩家看到请求,可将Permission设为Private,但目标玩家仍能通过Client API读取自己的Private数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:37:10