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

Unity中Facebook Consumer转Gaming Services应用的用户数据迁移咨询

解决Facebook Consumer应用转Gaming Services应用后的用户数据迁移问题

问题根源

Facebook的Consumer应用与Gaming Services应用属于独立的应用实体,同一用户在两个应用中的Scoped ID(即普通登录返回的id字段)是不同的,这导致系统无法自动关联旧账号数据。


官方推荐的无邮箱迁移方案:应用关联(App Linking)

这是最稳定的迁移方式,无需依赖用户邮箱授权,步骤如下:

  1. 登录Facebook开发者后台,打开新创建的Gaming Services应用
  2. 进入「Settings」>「Advanced」>「Linked Apps」栏目
  3. 添加旧的Consumer应用作为关联应用(需验证旧应用的开发者权限)
  4. 关联完成后,通过Facebook SDK获取用户的Global User ID(全局用户ID)——这个ID在关联的应用中是一致的

Unity中获取Global ID的代码示例

using UnityEngine;
using Facebook.Unity;
using System.Collections.Generic;

public class FacebookAuth : MonoBehaviour
{
    void Start()
    {
        if (!FB.IsInitialized)
        {
            FB.Init(() =>
            {
                if (FB.IsInitialized) FB.ActivateApp();
            });
        }
        else
        {
            FB.ActivateApp();
        }
    }

    public void LoginForMigration()
    {
        // 请求必要权限,global_id属于public_profile字段组
        var permissions = new List<string> { "public_profile", "email" };
        FB.LogInWithReadPermissions(permissions, OnLoginComplete);
    }

    void OnLoginComplete(ILoginResult result)
    {
        if (FB.IsLoggedIn && !string.IsNullOrEmpty(result.AccessToken.TokenString))
        {
            // 调用Graph API获取全局ID和邮箱
            FB.API("/me?fields=global_id,email", HttpMethod.GET, OnGetUserInfo);
        }
    }

    void OnGetUserInfo(IGraphResult result)
    {
        if (result.Error == null && result.ResultDictionary.ContainsKey("global_id"))
        {
            string globalUserId = result.ResultDictionary["global_id"].ToString();
            string userEmail = result.ResultDictionary.ContainsKey("email") ? result.ResultDictionary["email"].ToString() : null;

            // 用globalUserId匹配旧系统中存储的用户全局ID(需提前在旧应用中存储该字段)
            // 若旧系统未存globalId,再尝试用userEmail匹配
            MigrateUserData(globalUserId, userEmail);
        }
    }

    void MigrateUserData(string globalId, string email)
    {
        // 此处实现你的数据迁移逻辑:查询旧系统数据、合并到新账号
    }
}

稳定获取邮箱的优化方案

如果必须依赖邮箱迁移,可通过以下方式提升授权率:

  • 明确授权说明:在登录授权弹窗前,添加游戏内提示,告知用户「授权邮箱是为了迁移您的游戏进度,不会用于其他用途」,降低用户抵触心理
  • 降级处理流程:若用户拒绝授权邮箱,提供备选匹配方式(如旧账号的游戏内角色ID、昵称、充值记录等),引导用户提交信息后人工审核迁移
  • 权限请求时机:不要在首次启动就请求邮箱权限,可在用户触发「数据迁移」操作时再弹出授权请求,针对性更强

额外保障措施

  • 保留旧应用的登录入口至少3-6个月,让用户可以通过旧应用登录后,一键绑定新应用账号并自动迁移数据
  • 针对无法通过自动方式迁移的用户,提供人工客服通道,通过核实账号历史数据(如角色等级、道具、充值记录)完成手动迁移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:50:28