苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡

简介: 苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡

苹果app上架-ios上架苹果商店app store 之苹果支付In - App Purchase内购配置-优雅草卓伊凡

配置苹果内购商品主要涉及在苹果开发者后台创建内购产品以及在应用内实现相关逻辑来展示和处理这些商品。以下是详细步骤:

一、在苹果开发者后台创建内购商品

  1. 登录并进入App配置页面
  • 登录苹果开发者中心,点击“App Store Connect”。
  • 选择你要配置内购的应用,进入应用详情页面。

找到应用

没有应用的话就点击添加应用

  1. 创建内购项目
  • 在应用详情页面,点击“功能”选项卡,然后选择“内购项目”。
  • 点击“+”按钮开始创建新的内购产品。
  1. 选择内购产品类型
  • 消耗型产品:用户购买后可多次使用,使用后即消耗,需再次购买。例如游戏中的虚拟货币、道具等。
  • 非消耗型产品:用户购买一次后可永久使用,通常用于解锁应用的高级功能,如去除广告、解锁特定内容等。
  • 自动续期订阅:按周期自动续订的订阅服务,如月度、年度会员。用户订阅后,到期前若未取消,将自动扣费续订。
  • 非续期订阅:提供一定期限的服务,到期后不会自动续订。例如特定时间段的课程订阅。

很明显我们的游戏的积分属于消耗性产品

  1. 填写内购产品信息
  • 产品ID:需使用唯一标识符,格式通常为反向域名形式,如com.example.yourapp.productname。确保此ID在应用内和开发者后台保持一致,用于识别不同的内购商品。
  • 参考名称:仅用于开发者内部识别,方便管理不同内购产品,不会显示给用户。
  • 名称:展示给用户的产品名称,应简洁明了,突出产品价值,例如“100枚金币”“高级会员月卡”等。
  • 描述:详细描述产品内容和优势,帮助用户了解购买后能获得什么,如“购买此商品可获得100枚金币,用于在游戏中购买道具,提升游戏体验”。
  • 价格:从苹果提供的价格档位中选择适合的价格。不同国家和地区会根据汇率等因素显示相应的本地化价格。
  • 可用性:可以选择立即发布产品,或设置未来的发布日期。

选择地区 设置价格

然后设置税率

选择app的类型,对应类型税率不同,我们是游戏,选择游戏

最后下方 设置图标,也就是要商品的购物图标,下面的截图是商城购买内容

  1. 配置其他信息(部分产品类型需要)
  • 对于自动续期订阅
  • 订阅周期:选择订阅的时长,如每周、每月、每年等。
  • 免费试用期:可设置一定时长的免费试用期,吸引用户尝试订阅服务。
  • 续订优惠:可以为老用户提供续订折扣,以鼓励用户持续订阅。
  • 对于消耗型产品和非消耗型产品:可上传相关截图或视频,展示产品在应用中的使用场景或效果,帮助用户更好地理解产品。
  1. 提交审核(若需要)
  • 创建完成后,内购产品可能需要经过苹果审核,确保其符合App Store审核指南。审核通过后,产品才能在应用内正常使用。

二、在应用内配置展示和处理内购商品逻辑

  1. 导入StoreKit框架
  • 如果使用Swift开发,在相关视图控制器文件顶部导入StoreKit框架:
import StoreKit
  • 若使用Objective - C,在对应的.h文件中导入:
#import <StoreKit/StoreKit.h>
  1. 请求产品信息
  • 在Swift中,创建函数来请求内购产品信息:
func requestProducts() {
guard let productIdentifiers = Set([
  "com.example.yourapp.product1", // 替换为实际产品ID
  "com.example.yourapp.product2"
]) as? Set<String> else { return }
let request = SKProductsRequest(productIdentifiers: productIdentifiers)
request.delegate = self
request.start()
}
  • 在Objective - C中:
    ```objectivec
  • (void)requestProducts {
    NSSet *productIdentifiers = [NSSet setWithObjects:
@"com.example.yourapp.product1", // 替换为实际产品ID
                           @"com.example.yourapp.product2",
                           nil];

SKProductsRequest *request = [[SKProductsRequest alloc] initWithProductIdentifiers:productIdentifiers];
request.delegate = self;
[request start];
}

- 实现`SKProductsRequestDelegate`代理方法以获取产品信息,并在应用中展示:
```swift
extension ViewController: SKProductsRequestDelegate {
  func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
      let products = response.products
      for product in products {
          // 根据产品信息,在应用界面上展示商品名称、价格等
          print("Product: \(product.productIdentifier), Price: \(product.price)")
      }
  }
  func request(_ request: SKRequest, didFailWithError error: Error) {
      print("Error fetching products: \(error.localizedDescription)")
  }
}

```objectivec

  • (void)productsRequest:(SKProductsRequest )request didReceiveResponse:(SKProductsResponse )response {
    NSArray products = response.products;
    for (SKProduct product in products) {
// 根据产品信息,在应用界面上展示商品名称、价格等
  NSLog(@"Product: %@, Price: %@", product.productIdentifier, product.price);

}
}

  • (void)request:(SKRequest )request didFailWithError:(NSError )error {
    NSLog(@”Error fetching products: %@”, error.localizedDescription);
    }
    ```
  1. 处理购买逻辑
  • 在Swift中,创建购买函数:
func purchase(product: SKProduct) {
let payment = SKPayment(product: product)
SKPaymentQueue.default().add(payment)
}
  • 在Objective - C中:
    ```objectivec
  • (void)purchaseProduct:(SKProduct )product {
    SKPayment payment = [SKPayment paymentWithProduct:product];
    [[SKPaymentQueue defaultQueue] addPayment:payment];
    }
- 实现`SKPaymentTransactionObserver`代理方法来处理购买交易结果:
```swift
extension ViewController: SKPaymentTransactionObserver {
  func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
      for transaction in transactions {
          switch transaction.transactionState {
          case.purchased:
              SKPaymentQueue.default().finishTransaction(transaction)
              // 处理购买成功逻辑,如解锁功能、更新UI
              break
          case.failed:
              SKPaymentQueue.default().finishTransaction(transaction)
              // 处理购买失败逻辑,提示用户失败原因
              break
          case.restored:
              SKPaymentQueue.default().finishTransaction(transaction)
              // 处理恢复购买逻辑,恢复用户已购买内容
              break
          default:
              break
          }
      }
  }
}

```objectivec

  • (void)paymentQueue:(SKPaymentQueue )queue updatedTransactions:(NSArray<SKPaymentTransaction > )transactions {
    for (SKPaymentTransaction transaction in transactions) {
switch (transaction.transactionState) {
      case SKPaymentTransactionStatePurchased:
          [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
          // 处理购买成功逻辑,如解锁功能、更新UI
          break;
      case SKPaymentTransactionStateFailed:
          [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
          // 处理购买失败逻辑,提示用户失败原因
          break;
      case SKPaymentTransactionStateRestored:
          [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
          // 处理恢复购买逻辑,恢复用户已购买内容
          break;
      default:
          break;
  }

}
}
```

目录
打赏
0
13
13
7
202
分享
相关文章
苹果上架APP遇到提示缺少出口合规证明时应该如何处理-什么是APP加密文稿-优雅草卓伊凡
苹果上架APP遇到提示缺少出口合规证明时应该如何处理-什么是APP加密文稿-优雅草卓伊凡
92 62
苹果上架APP遇到提示缺少出口合规证明时应该如何处理-什么是APP加密文稿-优雅草卓伊凡
|
6天前
|
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
54 15
如何在苹果内购开发中获取App Store Connect API密钥-共享密钥理解内购安全-优雅草卓伊凡
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
197 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
71 8
【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
177 66
|
3月前
|
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
151 11
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
202 3

热门文章

最新文章

  • 1
    苹果app上架app store 之苹果开发者账户在mac电脑上如何使用钥匙串访问-发行-APP发布证书ios_distribution.cer-优雅草卓伊凡
    46
  • 2
    uniapp云打包ios应用证书的获取方法,生成指南
    47
  • 3
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    124
  • 4
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    29
  • 5
    iOS各个证书生成细节
    43
  • 6
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    214
  • 7
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    66
  • 8
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    86
  • 9
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    68
  • 10
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    71