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

Xamarin.iOS集成Razorpay时InitWithKey初始化返回null求助

Xamarin.iOS 集成Razorpay时InitWithKey返回null的解决方案

这个问题是Xamarin绑定Razorpay iOS SDK的高频踩坑点,按以下顺序排查即可解决:

1. 补全SDK依赖的系统框架与库

Razorpay iOS SDK初始化时会检测依赖项,缺任何一个都会直接返回null,在iOS项目的生成配置中添加以下系统框架:

  • WebKit.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • Security.framework
  • QuartzCore.framework
  • CoreGraphics.framework
  • UIKit.framework
  • Foundation.framework
    同时在额外链接器标志中添加-lz -lc++,或者直接在项目引用里加入libz.tbd、libc++.tbd两个系统库。

2. 修正绑定项目的方法签名错误

你使用的第三方公开绑定仓库存在签名错误,原生initWithKey:delegate:是返回实例对象的类方法,旧绑定错误将返回值写为void,导致Runtime调用时拿不到返回对象。
打开绑定项目的ApiDefinition.cs,把InitWithKey的绑定代码替换为以下正确写法:

[Static, Export ("initWithKey:delegate:")]
Razorpay InitWithKey (string key, IRazorpayPaymentDelegate paymentDelegate);

改完后必须删除整个解决方案的bin、obj文件夹,执行全量Clean后重新编译,增量编译的旧绑定缓存会导致修改不生效。

3. 检查原生框架引用配置

选中你添加的Razorpay.framework原生引用,在属性面板做如下配置:

  • 将「复制到输出目录」设置为如果较新则复制
  • 「链接行为」先设置为不要链接做测试,确认初始化正常后再根据需要调整为SDK链接
  • 确认你导入的framework是包含arm64(真机)+x86_64/arm64(模拟器)的通用Fat框架,单架构框架在对应架构的设备上运行时会加载失败。

4. 修正初始化时机与Delegate生命周期

  • 不要在AppDelegate的FinishedLaunching阶段过早初始化SDK,等主UIViewController的ViewDidLoad执行、KeyWindow加载完成后再调用初始化方法,过早调用时系统运行环境未准备完成会导致SDK初始化失败。
  • 传入的paymentDelegate不要声明为方法内的临时变量,要将其赋值为当前类的实例字段,避免被GC回收造成野指针,SDK检测到Delegate无效时会直接返回null。

5. 补全Info.plist配置

在Info.plist中添加ATS配置,保证SDK可以正常访问Razorpay服务端完成密钥校验:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <false/>
    <key>NSExceptionDomains</key>
    <dict>
        <key>razorpay.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <true/>
        </dict>
    </dict>
</dict>

所有配置修改完成后优先在真机上测试,模拟器经常存在架构兼容问题导致的加载失败,按上述步骤调整后即可正常拿到Razorpay实例完成支付流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 01:18:49