如何在Xamarin Forms/MAUI中入门RevenueCat内购开发
在Xamarin Forms iOS(Mac版VS2022)中集成RevenueCat的入门摸索笔记
目前找不到Xamarin Forms中使用RevenueCat绑定的官方文档或示例,自己摸索了一套步骤,还没做测试,欢迎大家补充或指正。本文适用于Mac版Visual Studio 2022的Xamarin Forms iOS项目,MAUI项目操作流程可能类似。
前期准备
- 先在RevenueCat后台创建项目,获取对应的API密钥和App ID
- 打开Mac版Visual Studio 2022,加载你的Xamarin Forms iOS项目
集成绑定库
- 通过NuGet搜索并安装
RevenueCat.Xamarin.iOS(如果没有官方包,需要自行创建绑定项目)注:如果官方没有现成NuGet包,得手动创建Xamarin绑定项目,导入RevenueCat的iOS SDK框架文件(
.framework),配置绑定项目的ApiDefinition.cs和StructsAndEnums.cs来映射原生API
初始化RevenueCat
在iOS项目的AppDelegate.cs的FinishedLaunching方法中添加初始化代码:
using RevenueCat; public override bool FinishedLaunching(UIApplication app, NSDictionary options) { // 替换为你的RevenueCat API密钥 Purchases.SharedInstance.ConfigureWithAPIKey("你的API密钥"); // 可选:自定义用户ID,不设置会自动生成匿名ID // Purchases.SharedInstance.SetAppUserID("用户唯一标识"); return base.FinishedLaunching(app, options); }
实现购买功能
- 在Xamarin Forms共享项目中定义接口:
public interface IRevenueCatService { Task<List<Subscription>> GetAvailableSubscriptions(); Task<PurchaseResult> PurchaseSubscription(Subscription subscription); } // 辅助模型类 public class Subscription { public string Id { get; set; } public string Price { get; set; } public string Title { get; set; } } public class PurchaseResult { public bool Success { get; set; } public string ErrorMessage { get; set; } public PurchaserInfo PurchaserInfo { get; set; } }
- 在iOS项目中实现接口:
public class RevenueCatService : IRevenueCatService { public async Task<List<Subscription>> GetAvailableSubscriptions() { var subscriptions = new List<Subscription>(); var offerings = await Purchases.SharedInstance.GetOfferingsAsync(); if (offerings.Current != null) { foreach (var package in offerings.Current.AvailablePackages) { subscriptions.Add(new Subscription { Id = package.Identifier, Price = package.Product.Price.ToString(), Title = package.Product.LocalizedTitle }); } } return subscriptions; } public async Task<PurchaseResult> PurchaseSubscription(Subscription subscription) { var offerings = await Purchases.SharedInstance.GetOfferingsAsync(); var targetPackage = offerings.Current?.AvailablePackages .FirstOrDefault(p => p.Identifier == subscription.Id); if (targetPackage == null) { return new PurchaseResult { Success = false, ErrorMessage = "未找到指定订阅套餐" }; } try { var purchaserInfo = await Purchases.SharedInstance.PurchasePackageAsync(targetPackage); return new PurchaseResult { Success = true, PurchaserInfo = purchaserInfo }; } catch (Exception ex) { return new PurchaseResult { Success = false, ErrorMessage = ex.Message }; } } }
- 在共享项目中通过依赖服务调用:
var revenueCatService = DependencyService.Get<IRevenueCatService>(); var subscriptions = await revenueCatService.GetAvailableSubscriptions(); // 展示订阅列表,用户选择后执行购买 var selectedSubscription = subscriptions.First(); var purchaseResult = await revenueCatService.PurchaseSubscription(selectedSubscription);
验证订阅状态
在需要验证的位置调用API获取用户订阅信息:
var purchaserInfo = await Purchases.SharedInstance.GetPurchaserInfoAsync(); if (purchaserInfo.ActiveSubscriptions.Any()) { // 用户存在活跃订阅 } else { // 用户无活跃订阅 }
内容的提问来源于stack exchange,提问作者BillF
相关产品推荐
相关产品推荐

