如何支持/提供免费试用期的 iO​​S 订阅?

2024-03-06

我正在努力改变现有的 iOS 10+ 应用程序以提供自动续订订阅。

虽然“正常”订阅(无介绍性优惠)在我的应用程序和服务器上(收据验证和用户帐户处理)都运行良好,但我很难理解如何提供免费试用期。

在 App Store Connect 中设置免费试用期没有问题,但我不明白如何在我的应用程序和服务器上实现它。


问题 1:了解资格

来自苹果文档:

您可以向以前没有提供过的客户提供介绍性优惠 收到给定产品或任何产品的介绍性报价 同一订阅组中的产品 (...)

在提供介绍性价格之前,您必须首先确定是否 用户有资格接收它 (...)

要确定用户是否有资格获得介绍性优惠,请检查他们的收据...

假设我已经设置了订阅7 天免费试用。用户购买此订阅、使用免费试用版并继续付费订阅一段时间,然后再取消订阅。一段时间后,想要继续订阅

如果用户购买会发生什么相同的订阅产品 again?

  • 会因为已经使用了免费试用而失败吗? (“……之前没有收到过介绍性offer的人……”)
  • 是否会开始另一个免费试用期?(==商店根本不检查资格)
  • 会开始于no免费试用,但直接付费

换句话说:

仅需要检查资格显示正确的 UI(= 授予优惠是/否由商店检查)或确保用户无法从相同的优惠中受益(= 授予优惠是/否由应用程序检查)?


问题2:如何查询资格?

正如苹果文档中所述,检查资格的最佳方法是验证应用程序收据并检查是否已收到介绍性优惠。这应该尽早完成,最好在应用程序启动时完成。

好吧,但据我所知,不能保证收据可用。如果找不到收据,用户必须首先提供他的应用程序商店凭据才能下载收据...

如果应用程序在第一次启动时所做的第一件事是要求用户登录商店,那将是非常烦人的。

这真的是预期的实现吗?


问题3:如何办理资格?

假设我已成功检查用户是否有资格收到优惠:如何提供报价?

我必须设置吗两种不同的订阅产品在 App Store Connect 中(一种有免费试用,一种没有)让用户购买其中之一?

或者仅需要进行资格检查显示正确的 UI (“立即购买并免费试用” vs “现在买”)而我可以在这两种情况下使用相同的产品吗?


问题 1:了解资格

他将立即被收取订阅费用。免费试用仅限一次

问题3:如何办理资格?

  1. 我是否必须在 App Store Connect 中设置两种不同的订阅产品(一种有免费试用,一种没有)才能让用户 购买其中之一还是另一个?

    不需要。您只需设置一种产品并添加介绍性优惠(免费试用或介绍性优惠)

  2. 或者资格检查只需要显示正确的用户界面(“立即购买免费试用”与“立即购买”),而我在这两种情况下都可以使用相同的产品?

    它仅用于显示正确的 CTA 和消息。最终,商店(苹果)将决定用户是否获得免费试用

要检查用户的资格,您需要将收据传递到您的服务器。然后,您的服务器可以向 Apple 查询解码后的收据(/verifyReceipt 端点)。在解码后的收据中,检查latest_renewal_info列表中的所有txn。如果您发现同一订阅组中的任何产品的 is_in_free_Trial 字段为 true,那么您可以安全地假设用户之前使用过免费试用版并向用户显示正确的消息。

此外,即使该订阅组下的所有产品都启用了免费试用,用户也只能在每个订阅组中获得一次免费试用。

我同意苹果在查询产品时会在应用程序本身中提供资格。但请相信我,包括谷歌在内的所有应用商店都没有提供此信息。

就登录而言,收据始终存在于沙箱位置,并且可以从那里检索。 (另外,请注意,如果用户未登录,无论如何都无法购买订阅)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何支持/提供免费试用期的 iO​​S 订阅? 的相关文章

  • 从 Mac 命令行访问 iOS 应用程序目录(沙箱)

    我需要使用 Mac 或 Linux 上的命令行 非 GUI 访问 iOS 设备上安装的应用程序的沙箱目录 这有助于开发和测试自动化 将 json 文件放入沙箱中可以让我设置参数 例如额外的调试消息和更小的刷新间隔 像 iFunBox 这样的
  • 以编程方式从底部裁剪图像

    我正在开发自定义相机应用程序 一切进展顺利 但我在从底部裁剪图像时遇到了问题 即 裁剪后的图像与原始图像具有完全相同的宽度 但高度将为原始图像的 1 3 并且必须从底部开始 斯威夫特3解决方案 func cropBottomImage im
  • 不明白 Swift 中的闭包示例

    我正在尝试了解 swift 和闭包 我被这个例子困住了 numbers map number Int gt Int in let result 3 number return result 什么是 number Int gt Int 它是一
  • ios 在后台处理推送通知

    我想保存应用程序处于后台状态时到达的推送通知 我知道关于 void application UIApplication application didReceiveRemoteNotification NSDictionary userIn
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • ios 导航 堆栈操作

    我在尝试从 iOS 应用程序操作导航堆栈时遇到问题 或者至少是由于这种操纵而产生的行为 我的情况 我有 3 个 ViewController 控制器a显示多个级别 控制器 b 是游戏视图 控制器 c 是某种分数 显然 我将在控制器 a 中选
  • SwiftUI:状态栏颜色

    有没有办法将 SwiftUI 视图的状态栏更改为白色 我可能错过了一些简单的东西 但我似乎找不到在 SwiftUI 中将状态栏更改为白色的方法 到目前为止我只看到 statusBar hidden Bool 状态栏文本 色调 前景色可以通过
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 错误域=AVFoundationErrorDomain代码=-11814“无法记录”

    它不断给我错误 错误域 AVFoundationErrorDomain代码 11814 无法记录 我不确定问题是什么 我试图在拍照后计数器达到 1 时录制声音 static int counter counter will always b
  • 使用 Interface Builder 创建 UIScrollView 的步骤

    我正在尝试使用 UIScrollView 但似乎有一些基本的事情我不理解 假设我想在我的 iPhone 应用程序中使用 UIScrollView 我有一个充满按钮的视图 尺寸为 320x700 显然 这对于 320x480 的 iPhone
  • 进入前台后刷新数据

    更改默认设置后 我想在AppDelegate中进入前台时刷新myViewController的数据 我所做的是 AppDelegate m void applicationDidFinishLaunching UIApplication a
  • iOS:提高图像绘制速度

    我有一系列想要制作动画的图像 UIImageView支持一些基本的动画 但不足以满足我的需求 我的第一个方法是使用UIImageView并设置image当图像属性 这太慢了 速度慢的原因是图像的绘制 这让我感到惊讶 我以为瓶颈会加载图像 我
  • 检测 AvPlayer 何时切换比特率

    在我的应用程序中 我使用 AVPlayer 通过 HLS 协议读取一些流 m3u8 文件 我需要知道在流会话期间 客户端切换比特率多少次 我们假设客户端的带宽正在增加 因此客户端将切换到更高比特率的段 AVPlayer能检测到这个开关吗 T
  • 防止 AlertView 被解雇

    任何人都可以帮助我防止在其按钮单击事件上解雇警报视图吗 我有一个 textview 作为我的alertView 的子视图 如果 textview 值为 nil 我不想关闭它 因为这是一个非常老的问题 但我得到了一个解决方案 并且如果其他开发
  • iphone:如何停止快门动画?

    我有两个问题 1 我想知道如何在相机加载时停止快门动画 我正在使用 UIImagePickerController 我已经参考了堆栈溢出的许多答案 但没有成功 2 我在相机中有一个自定义按钮 使用cameraOverlayView并想通过单
  • Google 地图 API -> OpenGLES 崩溃

    日志是从 Crashlytics 粘贴的 对于许多用户来说 崩溃经常发生 据我所知 它与设备 iOS 版本无关 我在我的代码中找不到任何错误 这似乎是纯粹的库问题 是 Google 地图 API 错误吗 我可以做些什么来修复它 或者我应该在
  • 指定访问组时出现 KeychainItemWrapper 错误

    相当长一段时间以来 我一直在使用 KeychainItemWrapper 的 ARC 版本成功读取和写入私有钥匙串项目 我现在正在努力将我的 iOS 应用程序转换为使用共享访问组 以便我的 2 个共享相同应用程序前缀的应用程序可以访问钥匙串
  • WhatsApp 显示警告“此项目无法共享。请选择其他项目。”对于 iOS 应用程序。

    我正在开发一个 iOS 应用程序 在该应用程序中 我有社交共享功能 并且社交共享功能使用深度链接来共享 URL 该网址共享对于所有应用程序都运行良好 除了WhatsApp 它会显示一个警报弹出窗口 此项目无法共享 请选择其他项目 以下是我的
  • 如何反转 CGPath 的点顺序

    我想画一个圆圈 并用它打出字母 为此 我需要顺时针抚摸圆圈 逆时针抚摸字母 这一切都很好 但是当我使用 Core Text 获取字母路径时 我不知道如何从本质上反转该路径 不是镜像或旋转或任何东西 这很简单 我希望点笔画顺序是逆时针的 这实
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac

随机推荐