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

使用Facebook Unity SDK时,如何获取好友邀请转化后的指定requestId?

刚好我之前在项目里实现过这个邀请奖励的功能,踩过不少坑,给你分享下最新的正确做法:

核心逻辑确认

你的推测完全正确:当好友点击邀请通知(不管是直接打开游戏还是下载安装后首次启动),系统会通过深度链接把request_id传递给应用,Facebook Unity SDK确实能捕获到这个参数,关键是做好平台配置和正确调用SDK的方法。

具体实现步骤

1. 先配置平台的深度链接支持

不管iOS还是Android,都得先在项目里配置好对应的URL Scheme和深度链接参数,不然Facebook的通知无法正确跳转到你的应用,也就传不过来requestId。

  • iOS配置:
    • 打开Xcode的Info.plist,添加LSApplicationQueriesSchemes数组,加入fb[你的AppID](比如你的AppID是123456,就加fb123456)。
    • 在URL Types里添加一个新项,URL Schemes设置为fb[你的AppID],Role选Editor。
  • Android配置:
    • 在AndroidManifest.xml里,给主Activity添加intent-filter,处理Facebook的深度链接:
      <intent-filter>
          <action android:name="android.intent.action.VIEW" />
          <category android:name="android.intent.category.DEFAULT" />
          <category android:name="android.intent.category.BROWSABLE" />
          <data android:scheme="fb[你的AppID]" />
      </intent-filter>
      
    • 确保已经添加了Facebook的meta-data:
      <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id" />
      

2. Unity中用Facebook SDK获取requestId

最新的Facebook Unity SDK(v12及以上)提供了FB.Mobile.GetAppLink方法来获取深度链接数据,这是异步方法,建议在应用启动时调用:

using UnityEngine;
using Facebook.Unity;

public class FacebookInviteHandler : MonoBehaviour
{
    private void Awake()
    {
        // 初始化SDK
        if (!FB.IsInitialized)
        {
            FB.Init(OnInitComplete);
        }
        else
        {
            OnInitComplete();
        }
    }

    private void OnInitComplete()
    {
        if (FB.IsInitialized)
        {
            FB.ActivateApp();
            // 检查深度链接中的邀请requestId
            CheckInviteRequestId();
        }
        else
        {
            Debug.LogError("Facebook SDK初始化失败");
        }
    }

    private void CheckInviteRequestId()
    {
        FB.Mobile.GetAppLink((result) =>
        {
            if (result.Error != null)
            {
                Debug.LogError($"获取AppLink失败: {result.Error.Message}");
                return;
            }

            if (result.HasLink)
            {
                // 解析URL中的查询参数
                var queryParams = System.Web.HttpUtility.ParseQueryString(result.TargetUrl.Query);
                string requestId = queryParams.Get("request_id");

                if (!string.IsNullOrEmpty(requestId))
                {
                    Debug.Log($"捕获到邀请Request ID: {requestId}");
                    // 这里不要直接在客户端发奖励!
                    // 把requestId传到你的后端服务器,做后续验证和奖励发放
                    SendRequestIdToServer(requestId);
                }
                else
                {
                    Debug.Log("未找到request_id参数");
                }
            }
            else
            {
                Debug.Log("没有检测到Facebook深度链接");
            }
        });
    }

    private void SendRequestIdToServer(string requestId)
    {
        // 这里实现你的网络请求,把requestId发送到后端
        // 后端会调用Facebook Graph API验证这个requestId的合法性
    }
}

3. 后端验证requestId并发放奖励

拿到requestId后,绝对不能在客户端直接给邀请者发奖励,必须通过后端验证,防止作弊:

  • 后端调用Facebook Graph API的GET /{request_id}接口,需要带上你的应用访问令牌。
  • 接口返回的数据里,from字段就是发送邀请的用户ID,to字段是当前用户ID,还要检查type是否为invite,以及这个请求是否未被处理过(可以在你的数据库里记录已处理的requestId)。
  • 验证通过后,给from对应的用户账号发放奖励。

常见注意事项

  • 确保使用最新稳定版的Facebook Unity SDK,旧版本可能有方法废弃或者兼容性问题。
  • 测试时一定要用真机,模拟器可能无法正确处理Facebook通知和深度链接。
  • 在Facebook开发者后台,确保你的应用的深度链接配置正确(在Settings > Advanced > Deep Linking里填写好对应的链接)。
  • iOS上要注意ATS设置,允许Facebook的域名访问(可以在Info.plist里添加NSAppTransportSecurity的例外)。
  • 如果用户是下载安装后首次打开应用,Facebook SDK会自动保存深度链接参数,启动时能正常捕获到,不需要额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:46:43