Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Building a modern subscription experience on iOS
Search
Bas Broek
August 17, 2022
Programming
200
0
Share
Building a modern subscription experience on iOS
Sharing a story on how we built subscriptions for the iOS WeTransfer app.
Bas Broek
August 17, 2022
More Decks by Bas Broek
See All by Bas Broek
Roasting Your App's Accessibility
basthomas
0
35
Building an Accessibility Culture, One Step at a Time (Leeds)
basthomas
0
130
Building an Accessibility Culture, One Step at a Time
basthomas
1
110
Not an afterthought: accessibility from start to finish
basthomas
0
160
Accessibility on Apple Platforms: Beyond VoiceOver
basthomas
0
180
No Touch(screen) Required: Voice & Keyboard Accessibility
basthomas
0
180
Dancing with Dinosaurs: Objective-C and Swift Interop
basthomas
0
180
Effective Pull Request Reviews
basthomas
0
440
Accessibility in SwiftUI: Better Apps for Everyone
basthomas
0
180
Other Decks in Programming
See All in Programming
Terraform言語の静的解析 / static analysis of Terraform language
wata727
1
130
PicoRuby for IoT: Connecting to the Cloud with MQTT
yuuu
2
750
Don't Prompt Harder, Structure Better
kitasuke
0
810
10 Tips of AWS ~Gen AI on AWS~
licux
5
540
Road to RubyKaigi: Play Hard(ware)
makicamel
1
530
ついに来た!本格的なマルチクラウド時代の Google Cloud
maroon1st
0
370
Explore CoroutineScope
tomoeng11
0
160
AI時代のエンジニアリングの原則 / Engineering Principles in the AI Era
haru860
0
1.1k
UIの境界線をデザインする | React Tokyo #15 メイントーク
sasagar
2
420
JAWS-UG横浜 #100 祝・第100回スペシャルAWS は VPC レスの時代へ
maroon1st
0
210
My daily life on Ruby
a_matsuda
2
180
第3木曜LT会 #28
tinykitten
PRO
0
120
Featured
See All Featured
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
540
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
350
Color Theory Basics | Prateek | Gurzu
gurzu
0
300
We Have a Design System, Now What?
morganepeng
55
8.1k
The SEO Collaboration Effect
kristinabergwall1
1
440
How GitHub (no longer) Works
holman
316
150k
The Cult of Friendly URLs
andyhume
79
6.9k
Exploring anti-patterns in Rails
aemeredith
3
350
From π to Pie charts
rasagy
0
180
Context Engineering - Making Every Token Count
addyosmani
9
860
Designing for Performance
lara
611
70k
Transcript
BUILDING A MODERN SUBSCRIPTION EXPERIENCE ON IOS @BASTHOMAS 1 —
@basthomas, SwiftConf, August 17, 2022
AMAZING ANNUAL RECURRING REVENUE... ON IOS @BASTHOMAS 2 — @basthomas,
SwiftConf, August 17, 2022
SUPERB SUBSCRIPTIONS... ON IOS @BASTHOMAS 3 — @basthomas, SwiftConf, August
17, 2022
INTERESTING IN-APP PURCHASES... ON IOS @BASTHOMAS 4 — @basthomas, SwiftConf,
August 17, 2022
BUILDING A MODERN SUBSCRIPTION EXPERIENCE ON IOS @BASTHOMAS 5 —
@basthomas, SwiftConf, August 17, 2022
WHO AM I? ▸ @basthomas on Twitter ▸ XING ▸
Moya, GitHawk ▸ Apple (macOS VoiceOver) ▸ WeTransfer 6 — @basthomas, SwiftConf, August 17, 2022
WHY AM I TALKING ABOUT THIS TOPIC? 7 — @basthomas,
SwiftConf, August 17, 2022
WETRANSFER IOS ! 8 — @basthomas, SwiftConf, August 17, 2022
WETRANSFER IOS !! 9 — @basthomas, SwiftConf, August 17, 2022
WETRANSFER IOS !!! 10 — @basthomas, SwiftConf, August 17, 2022
! 11 — @basthomas, SwiftConf, August 17, 2022
! ..? 12 — @basthomas, SwiftConf, August 17, 2022
! 13 — @basthomas, SwiftConf, August 17, 2022
! 14 — @basthomas, SwiftConf, August 17, 2022
WE GOT SOME DESIGNS. LET'S GET CRACKIN', RIGHT? 15 —
@basthomas, SwiftConf, August 17, 2022
16 — @basthomas, SwiftConf, August 17, 2022
ACCESSIBILITY 17 — @basthomas, SwiftConf, August 17, 2022
18 — @basthomas, SwiftConf, August 17, 2022
19 — @basthomas, SwiftConf, August 17, 2022
WAIT, TWITTER? 20 — @basthomas, SwiftConf, August 17, 2022
! 21 — @basthomas, SwiftConf, August 17, 2022
HAPTICS 22 — @basthomas, SwiftConf, August 17, 2022
VOICEOVER 23 — @basthomas, SwiftConf, August 17, 2022
VOICE CONTROL & FULL KEYBOARD ACCESS 24 — @basthomas, SwiftConf,
August 17, 2022
DARK MODE, MOTION, MORE 25 — @basthomas, SwiftConf, August 17,
2022
LET'S GET CRACKIN' 26 — @basthomas, SwiftConf, August 17, 2022
LOCAL CONFIGURATION 27 — @basthomas, SwiftConf, August 17, 2022
28 — @basthomas, SwiftConf, August 17, 2022
29 — @basthomas, SwiftConf, August 17, 2022
WE'LL START SLOWLY 30 — @basthomas, SwiftConf, August 17, 2022
... AND USE FEATURE FLAGS 31 — @basthomas, SwiftConf, August
17, 2022
EVERYTHING'S GOING TO BE FINE, RIGHT? 32 — @basthomas, SwiftConf,
August 17, 2022
33 — @basthomas, SwiftConf, August 17, 2022
34 — @basthomas, SwiftConf, August 17, 2022
35 — @basthomas, SwiftConf, August 17, 2022
36 — @basthomas, SwiftConf, August 17, 2022
public func purchase(product: StoreProduct) async throws -> PurchaseInformation { try
checkRevenueCatConfiguration() let purchaseInformation = try await revenueCat.purchase(product: product) return .init( transaction: purchaseInformation.0, customerInformation: .init(customerInformation: purchaseInformation.1), isUserCancelled: purchaseInformation.2 ) } 37 — @basthomas, SwiftConf, August 17, 2022
... THAT'S IT? 38 — @basthomas, SwiftConf, August 17, 2022
THANKS, REVENUECAT 39 — @basthomas, SwiftConf, August 17, 2022
OH, AND THEN WE CRASHED 40 — @basthomas, SwiftConf, August
17, 2022
HAS ANYONE EVER TOLD YOU TO BE CAREFUL WITH FORCE-UNWRAPPING?
41 — @basthomas, SwiftConf, August 17, 2022
! 42 — @basthomas, SwiftConf, August 17, 2022
// when we are here, we should always be able
// to find a package. if not, that's a programmer error 43 — @basthomas, SwiftConf, August 17, 2022
PRODUCT IDENTIFIER: ? 44 — @basthomas, SwiftConf, August 17, 2022
// when we are here, we should always be able
// to find a package. if not, that's a // programmer error... or an Apple issue. // So do _NOT_ crash. ! 45 — @basthomas, SwiftConf, August 17, 2022
PRODUCT IDENTIFIER: 46 — @basthomas, SwiftConf, August 17, 2022
ANYWAY... 47 — @basthomas, SwiftConf, August 17, 2022
DEMO 48 — @basthomas, SwiftConf, August 17, 2022
49 — @basthomas, SwiftConf, August 17, 2022
50 — @basthomas, SwiftConf, August 17, 2022
DEMO 51 — @basthomas, SwiftConf, August 17, 2022
52 — @basthomas, SwiftConf, August 17, 2022
53 — @basthomas, SwiftConf, August 17, 2022
54 — @basthomas, SwiftConf, August 17, 2022
55 — @basthomas, SwiftConf, August 17, 2022
EVERYTHING IS GOING (TO BE) FINE, RIGHT? 56 — @basthomas,
SwiftConf, August 17, 2022
57 — @basthomas, SwiftConf, August 17, 2022
GRADUAL ROLLOUT 58 — @basthomas, SwiftConf, August 17, 2022
59 — @basthomas, SwiftConf, August 17, 2022
60 — @basthomas, SwiftConf, August 17, 2022
IT'S NOT A BUG, IT'S A FEATURE 61 — @basthomas,
SwiftConf, August 17, 2022
YOLO 62 — @basthomas, SwiftConf, August 17, 2022
YOLO CARPE DIEM 63 — @basthomas, SwiftConf, August 17, 2022
64 — @basthomas, SwiftConf, August 17, 2022
!"# 65 — @basthomas, SwiftConf, August 17, 2022
✅ 66 — @basthomas, SwiftConf, August 17, 2022
! 67 — @basthomas, SwiftConf, August 17, 2022
PAYWALLS 68 — @basthomas, SwiftConf, August 17, 2022
PAYWALLS CONTEXTUAL PAYWALLS 69 — @basthomas, SwiftConf, August 17, 2022
DEMO 70 — @basthomas, SwiftConf, August 17, 2022
71 — @basthomas, SwiftConf, August 17, 2022
CHANGING EXPIRATION DATES PASSWORD PROTECTION TRANSFER LIMIT 72 — @basthomas,
SwiftConf, August 17, 2022
PRE-LOGIN PAYWALL 73 — @basthomas, SwiftConf, August 17, 2022
! 74 — @basthomas, SwiftConf, August 17, 2022
! 75 — @basthomas, SwiftConf, August 17, 2022
! 76 — @basthomas, SwiftConf, August 17, 2022
A NOTE ON CUSTOMER SATISFACTION... 77 — @basthomas, SwiftConf, August
17, 2022
BE CAREFUL WITH "TRICKING" USERS TO BUY SUBSCRIPTIONS 78 —
@basthomas, SwiftConf, August 17, 2022
DEMO 79 — @basthomas, SwiftConf, August 17, 2022
80 — @basthomas, SwiftConf, August 17, 2022
! 81 — @basthomas, SwiftConf, August 17, 2022
82 — @basthomas, SwiftConf, August 17, 2022
TICKING LIKE (GERMAN) CLOCKWORK 83 — @basthomas, SwiftConf, August 17,
2022
There's something one should expect not only of a watch
but also of oneself: to never stand sti . — Walter Lange 84 — @basthomas, SwiftConf, August 17, 2022
EXPERIMENTS 85 — @basthomas, SwiftConf, August 17, 2022
OPTIMIZATION* 86 — @basthomas, SwiftConf, August 17, 2022
* HAPPY CUSTOMERS > SHORT TERM 87 — @basthomas, SwiftConf,
August 17, 2022
OPTIMIZATIONS TO CONSIDER ▸ Default to monthly ▸ Default to
yearly ▸ Focus on Pro ▸ Focus on Premium ▸ Button colors ▸ Etc. etc. 88 — @basthomas, SwiftConf, August 17, 2022
VERIFY, VERIFY, VERIFY 89 — @basthomas, SwiftConf, August 17, 2022
! 90 — @basthomas, SwiftConf, August 17, 2022
THANK YOU! @BASTHOMAS 91 — @basthomas, SwiftConf, August 17, 2022