Unity接入FCM实现Deep Link iOS端点击通知无法获取链接问题求助
解决方案
1. 修正FCM推送报文结构
iOS端FCM不识别notification.link字段,需要将Deep Link放在apns.payload.aps下的url字段,同时开启必要的推送标记,完整兼容双端的报文结构如下:
{ "to" : "{token}", "notification" : { "body" : "Body", "title": "Title", "link": "mylink://sometext" }, "apns": { "payload": { "aps": { "content-available": 1, "mutable-content": 1, "url": "mylink://sometext" } } } }
2. 补充Unity iOS端Native桥接代码
FCM iOS SDK收到通知点击后不会主动将Deep Link传递给Unity的Application.absoluteURL,需要在Xcode项目的UnityAppController.mm中添加以下回调方法,手动触发Deep Link事件:
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler { if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb] || userActivity.webpageURL) { // 将URL传递给Unity UnitySendMessage("DeepLinkManager", "OnDeepLinkReceived", userActivity.webpageURL.absoluteString.UTF8String); return YES; } // 处理通知点击携带的URL if (userActivity.userInfo[@"aps"][@"url"]) { NSString *deepLink = userActivity.userInfo[@"aps"][@"url"]; UnitySendMessage("DeepLinkManager", "OnDeepLinkReceived", deepLink.UTF8String); return YES; } return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler]; }
3. Unity侧补充接收逻辑
在Unity项目中新建名为DeepLinkManager的脚本,挂载到场景中同名的GameObject上,实现OnDeepLinkReceived方法即可拿到Deep Link参数:
public class DeepLinkManager : MonoBehaviour { // Native层调用的接收方法 public void OnDeepLinkReceived(string deepLink) { // 在这里处理Deep Link逻辑,和原来使用Application.absoluteURL的逻辑一致即可 Debug.Log($"收到Deep Link:{deepLink}"); } // 保留原有普通Deep Link的监听逻辑兼容网页、社交软件跳转 void Awake() { Application.deepLinkActivated += OnDeepLinkActivated; // 启动时如果有Deep Link直接处理 if (!string.IsNullOrEmpty(Application.absoluteURL)) { OnDeepLinkActivated(Application.absoluteURL); } } private void OnDeepLinkActivated(string url) { OnDeepLinkReceived(url); } }
内容的提问来源于stack exchange,提问作者obywan
相关产品推荐
相关产品推荐

