6个版本
0.3.0 | 2024年7月11日 |
---|---|
0.2.1 | 2024年5月12日 |
0.1.2 | 2024年5月6日 |
#558 在 游戏开发
每月下载量:159
28KB
460 行
bevy_ios_iap
提供从Bevy应用程序中访问iOS原生StoreKit2 Swift API的功能。它使用Swift-Bridge来自动生成粘合代码和传输数据类型。
使用此crate的我们游戏的演示:zoolitaire.com
另请参阅:bevy_ios_gamecenter、bevy_ios_notifications、bevy_ios_alerts、bevy_ios_review 以及 bevy_ios_impact
功能
- 获取产品
- 购买产品
- 监听交易状态的变化
- 获取所有交易列表(用于恢复旧的非消耗品购买)
注意
- 不返回本地未签名/未验证的交易
待办事项
- 支持订阅产品类型
- 在:
ios_iap_transactions_all
和ios_iap_products
中剩余的错误处理 - 允许访问签名以进行远程验证
- 支持优惠
- 支持家庭共享
- 交易撤销原因
说明
- 添加到XCode:添加SPM(Swift包管理器)依赖项
- 添加Rust依赖项
- 设置插件
1. 添加到XCode
-
添加
StoreKit
框架: -
转到
文件
->添加包依赖项
,并将https://github.com/rustunit/bevy_ios_iap.git
粘贴到右上角的搜索栏中: -
不要忘记像任何其他iOS应用程序一样配置您的购买,本指南不会关注这一点,因为这无论您使用什么引擎都是相同的。本指南侧重于在Bevy项目中设置这些内容。
注意:使用的 Rust crate 版本必须与 Swift 包版本完全一致(出于二进制兼容性原因)。我建议使用特定的版本(如截图中的 0.2.0
)以确保始终使用二进制匹配版本!
2. 添加 Rust 依赖
cargo add bevy_ios_iap
或
# always pin to the same exact version you also of the Swift package
bevy_ios_iap = { version = "=0.2.1" }
3. 设置插件
初始化 Bevy 插件
// request initialisation right on startup
app.add_plugins(IosIapPlugin::new(true));
fn bevy_system() {
// If you set the plugin to manual init, this will register the
// TranscactionObserver to listen to updates to any Transactions and trigger
// `IosIapEvents::Transaction` accordingly.
// Note: this will require the user to be logged in into their apple-id and popup a login dialog if not
bevy_ios_iap::init();
// request product details, product IDs have to be explicitly provided
// this will lead to a response: `IosIapEvents::Products`
bevy_ios_iap::get_products(vec!["com.rustunit.zoolitaire.levelunlock".into()]);
// trigger a product purchase for a specific product ID
// this will lead to a response: `IosIapEvents::Purchase`
bevy_ios_iap::purchase("com.rustunit.zoolitaire.levelunlock".into());
// request to restore active subscriptions and non-consumables
// this will lead to a response: `IosIapEvents::CurrentEntitlements`
bevy_ios_iap::current_entitlements();
// marks a transaction as finished after the product was provided to the customer.
// if this is not called a transaction will keep being triggered automatically on
// app start as iOS wants us to be sure we granted the user the purchased good.
// this will lead to a response: `IosIapEvents::TransactionFinished`
bevy_ios_iap::finish_transaction(42);
}
处理从 iOS 返回到 Rust 的响应事件
fn process_iap_events(
mut events: EventReader<IosIapEvents>,
) {
for e in events.read() {
match e {
IosIapEvents::Products(_) => todo!(),
IosIapEvents::Purchase(_) => todo!(),
IosIapEvents::Transaction(_) => todo!(),
IosIapEvents::TransactionFinished(_) => todo!(),
IosIapEvents::AllTransactions(_) => todo!(),
IosIapEvents::CurrentEntitlements(_) => todo!(),
}
}
}
Bevy 版本支持
bevy | bevy_ios_iap |
---|---|
0.14 | 0.3,main |
0.13 | 0.2 |
许可协议
本仓库中所有代码均采用以下两种许可协议之一:
- MIT 许可协议(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache 许可协议,版本 2.0(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
您可选择其中一种。这意味着您可以选择您偏好的许可协议。
您的贡献
除非您明确声明,否则根据 Apache-2.0 许可协议定义的,您提交的任何旨在包含在作品中的贡献,将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~27MB
~447K SLoC