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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:24:08