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

Xamarin.iOS集成Branch.io打开链接时遇Value cannot be null错误求助

解决Branch.io Xamarin.iOS唤起时的"Value cannot be null"错误

从你的错误栈来看,问题核心是Branch SDK在将链接数据反序列化为BranchUniversalObject时,传入了null值给Newtonsoft.Json的反序列化方法。下面是几个针对性的解决方案,按优先级排序:

1. 先检查Branch控制台的链接配置

首先排除链接本身的问题:

  • 登录Branch控制台,找到你测试用的链接,进入Data标签页,确认所有必填的元数据字段(比如$canonical_identifier、$canonical_url)都已设置,没有空值的情况。
  • 尝试创建一个极简的测试链接(只填核心必填项),再测试唤起APP,看是否还会报错。如果极简链接正常,说明原链接的自定义元数据里有异常值。

2. 升级Branch Xamarin SDK到最新版

旧版本的Branch Xamarin SDK存在null值处理的bug,尤其是在解析Universal Link返回的数据时:

  • 打开NuGet包管理器,找到BranchXamarinSDK,更新到最新的稳定版本。新版本通常会修复这类序列化时的null安全问题。

3. 添加null保护逻辑

虽然你严格遵循官方文档实现,但可以给Session回调和Json序列化添加一层防护:

给InitSessionComplete加前置检查

public void InitSessionComplete(BranchUniversalObject buo, BranchLinkProperties blp)
{
    // 先过滤null情况,避免后续空引用
    if (buo == null || buo.metadata == null || buo.metadata.Metadata == null)
    {
        Console.WriteLine("Branch: Received null UniversalObject or metadata, skipping deep link handling");
        return;
    }
    
    // 原有的业务逻辑...
    NSObject[] keys = { NSObject.FromObject("+is_first_session") };
    NSObject[] values = { NSObject.FromObject(0) };
    if (buo.metadata.Metadata.ContainsKey("+is_first_session"))
    {
        values[0] = NSObject.FromObject(buo.metadata.Metadata["+is_first_session"]);
    }
    NSDictionary nsData = NSDictionary.FromObjectsAndKeys(values, keys);
    NSNotificationCenter.DefaultCenter.PostNotificationName(Branch_notification, null, nsData);
}

全局配置Json序列化忽略null值

在FinishedLaunching方法初始化Branch之前,添加全局Json设置:

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    // 添加这行代码,让Json序列化忽略null值
    Newtonsoft.Json.JsonConvert.DefaultSettings = () => new Newtonsoft.Json.JsonSerializerSettings
    {
        NullValueHandling = Newtonsoft.Json.NullValueHandling.Ignore
    };

    // 原Branch初始化逻辑...
    BranchIOS.Debug = true;
    BranchIOS.Init(Branch_key, launchOptions, this);
    
    return true;
}

4. 检查Newtonsoft.Json版本兼容性

Branch SDK对Newtonsoft.Json有版本依赖:

  • 查看BranchXamarinSDK的NuGet依赖信息,确保你的项目使用的Newtonsoft.Json版本和SDK要求的版本匹配(比如SDK要求12.x,不要混用13.x或更低版本)。如果版本不兼容,可能会导致序列化逻辑异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:02:44