使用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。
- 打开Xcode的Info.plist,添加
- 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" />
- 在AndroidManifest.xml里,给主Activity添加intent-filter,处理Facebook的深度链接:
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
相关产品推荐
相关产品推荐

