Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
SWWDC 34
Search
asmz
December 27, 2017
Technology
900
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SWWDC 34
今年ハマったIn App Purchase
Talked at SWWDC #34
asmz
December 27, 2017
More Decks by asmz
See All by asmz
Firebase App Testing Agentで始めるAIベースの柔軟なE2Eテスト
asmz
0
1.6k
モバイルアプリ開発へE2Eテストを導入しよう
asmz
0
360
React Native+Expoで始めるWebフロント開発
asmz
0
860
UIデザインを考える全ての人たちに捧げる Apple Human Interface Guidelinesのススメ
asmz
1
2.9k
Overview of Swift and iOS App development
asmz
0
1.4k
How to get mobile app logs using Firebase Crashlytics
asmz
0
950
OK Google, Deploy the iOS app
asmz
1
1k
Cooperate with Adobe XD, Zeplin and Xcode
asmz
1
3.2k
phpconsen LT
asmz
0
860
Other Decks in Technology
See All in Technology
Incremental HTTP
kazuho
5
2k
形式手法を使って仕様をコーディングしよう
mikanichinose
0
170
個別開発で終わらせない。 現場の課題をプロダクトの強さに変える StockmarkのFDE
ktkrhr
0
560
[2026 Oracle Technical Deep Dive] AI時代のアプリケーションを支えるCloud NativeとJava EEモダナイゼーション (2026年9月17日開催)
oracle4engineer
PRO
0
110
Claude起点の仕様駆動開発
tanakaseiya
0
320
1人アドミンな私はAWSアカウント申請をSlackで完結したい!
ysuzuki
0
110
20260929_AmazonGuardDutyの検出通知メールにAWS DevOpsAgentの調査結果を追加する
yhana
1
430
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
150
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
140
HolmesGPTで始めるSREエージェント入門!プラットフォームの障害調査はAIにお任せ 〜
leveragestech
PRO
0
140
2026-10-01_MagicPod_QAハーネスエンジニアリングとQA組織の未来像
ynisqa1988
1
470
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
460
Featured
See All Featured
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
600
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
58k
Evolving SEO for Evolving Search Engines
ryanjones
0
310
The Limits of Empathy - UXLibs8
cassininazir
1
700
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
Site-Speed That Sticks
csswizardry
13
1.5k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
440
Being A Developer After 40
akosma
91
590k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
550
Are puppies a ranking factor?
jonoalderson
2
4k
The agentic SEO stack - context over prompts
schlessera
0
950
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
58k
Transcript
今年ハマったIn App Purchase 2017/12/26 SWWDC #34 asmz
Who are you? ▷ Akira Shimizu / asmz(@_asmz) ▷ 株式会社ビデオマーケット
iOSエンジニア ▷ 岩手県陸前高田市出身 ▷ 新卒から12年半東京に勤め、 2016/8より仙台にJターン
Who are you? ▷ 無類のビール好き ◦ 「麦芽系エンジニア」で検索すると前職エンジニアブログ の自分のエントリとか出ます ◦ 思わずドメイン取ってしまった
▪ https://asmz.beer
What are you doing? ▷ 株式会社ビデオマーケットとは? ◦ http://www.videomarket.co.jp/ ◦ 動画配信サービス(e.g.
Netflix, Hulu, etc...)を運営 ◦ 東京本社オフィス(赤坂) ▪ 今は100人くらい? ▪ うちエンジニアは40名くらい ◦ 仙台オフィス ▪ 13名 ▪ うちエンジニア4名
What are you doing? ▷ ビデオマーケット(https://www.videomarket.jp/) ◦ 配信本数は日本最大級(現在19万本) ▪ 自分はiOSアプリ開発担当
▪ 最近、tvOSアプリもリリースされました
“ 2017年の振り返り
Look back on 2017 ▷ 春 ◦ 会社の技術ブログ立ち上げ ◦ 社内勉強会立ち上げ
▷ 夏 ◦ 転職活動 ◦ React Nativeちょっと触る(バイト) ▷ 秋 ◦ In App Purchase実装 ▷ 冬 ◦ iPhoneX対応 ◦ CI導入検討
“ CASE1. iOS11でSandbox課金処理に失敗
Case1 ▷ 事象 ◦ iOS11.0でSandboxユーザで課金処理をしようとして も、AppleID入力画面が繰り返し表示 ◦ 3回くらい繰り返したあと、購入失敗(SKErrorDomain Code=0) ◦
iOS10系だと発生しない ◦ Productionリリース済の別アプリだと発生しない
Case1 ▷ 原因調査 ◦ どうやらこのForumの事象と同じ模様 ▪ https://forums.developer.apple.com/thread/80 560
Case1 ▷ 企画チームと相談 どうします?これ... TestFlightでノーイシューなエビデ ンスが取れればアグリーっす! この時、2017/10/10(JST)...
Case1 ▷ 2017/10/11(JST)、rich降臨 iOS 11.1 beta 2より問題解消!!
Knowledge ▷ 学び ◦ Apple Developer Forums頻繁にチェック ◦ iOSのマイナーバージョンアップでも油断せずに動作 確認
“ CASE2. tvOS実機で課金処理が動作しない
Case2 ▷ 事象 ◦ iOSアプリとtvOSアプリで共通化している課金処理 の、tvOSだけ購入・リストア処理が動作しない ◦ iOS/tvOSどちらも実機での確認
Case2 iOS/tvOS StoreKit Apple SKProductsRequest start() 有効なプロダクトか問い合わせ 回答 回答 (SKProductRequestDelegate経由)
SKPaymentQueueに 支払い要求キュー追加 回答 (SKPaymentTransactionObserver経由) 支払い要求 回答
Case2 iOS/tvOS StoreKit Apple SKProductsRequest start() 有効なプロダクトか問い合わせ 回答 回答 (SKProductRequestDelegate経由)
SKPaymentQueueに 支払い要求キュー追加 回答 (SKPaymentTransactionObserver経由) 支払い要求 回答 ここが受け取れていない!
Case2 ▷ 原因 ◦ In-App PurchaseプログラミングガイドのP15に以下の 記載あり App Storeに問い合わせるには、プロダクト要求オブジェクトを使用します。最初 に、SKProductsRequestのインスタンスを作成し、プロダクトIDのリストで初期
化します。要求オブジェクトへの強い参照を保持してください。そうしないと、要 求が完了しないうちに、システムが割り当て解除してしまうおそれがあります 2015/10/21にガイドに追記された模様
Case2 iOS/tvOS StoreKit Apple SKProductsRequest start() 有効なプロダクトか問い合わせ 回答 回答 (SKProductRequestDelegate経由)
SKPaymentQueueに 支払い要求キュー追加 回答 (SKPaymentTransactionObserver経由) 支払い要求 回答 tvOS実機では、このインスタ ンスが解放されてしまってい る模様
Case2 ▷ 対応(ガイドにサンプルコードあり) // Custom method - (void)validateProductIdentifiers:(NSArray *)productIdentifiers {
SKProductsRequest *productsRequest = [[SKProductsRequest alloc] initWithProductIdentifiers:[NSSet setWithArray:productIdentifiers]]; // Keep a strong reference to the request. self.request = productsRequest; productsRequest.delegate = self; [productsRequest start]; } [注意] ガイドに明記はされていないが、リストアも同様の 処理が必要
Knowledge ▷ 学び ◦ 共通処理だからといって油断せず、実機デバイス毎の 動作確認 ◦ 公式ガイドの更新履歴チェック
“ CASE3.自動更新型アイテム再購読時の挙動
Case3 ▷ 事象 ◦ 自動更新型課金アイテムの購読期間中に再度購読し ようとした時の挙動が、SandboxとProductionで異な る ▪ Sandbox •
←の画面が出つつ、Purchase Successが返却 ▪ Production • ←の画面が出つつ、Purchase Failed(SSErrorDomain Code=16)が返却
Case3 ▷ エラーコード(SSErrorDomain Code=16)でググっても ◦ いまいちしっくりくる回答がない ◦ Forumで上がっているものも、なんか今回の事象と違う ▪ https://forums.developer.apple.com/thread/9050
4 ◦ SSErrorDomainはStoreServices.frameworkのドメイン で、Privateフレームワークなのでそもそも完全に文章化 されてない、とか ▪ http://www.openradar.me/25502597
Case3 ▷ 例によって... ◦ In-App Purchaseプログラミングガイド参照 ユーザーがアプリケーションの復元インタフェースを使用する代わりに購入済み のプロダクトを購入しようとすると、App Storeによって復元トランザクションでは なく正常なトランザクションが作成されます。そのプロダクトについて、ユーザが
二重請求されることはありません。これらのトランザクションは、元のトランザク ションとまったく同じように扱ってください。
Case3 ▷ うーむ、これは...? Appleのバグなの では...?
Case3 ▷ イマココ(未解決) 手探りでログ添付したら「見れな いんで、ちゃんとこの資料の手順 通りログ取れ」って言われたとこ ろ
Knowledge ▷ 学び ◦ Sandboxを過信しない ◦ 調べても解決せず、実装も間違ってなさそうなら、バグ 報告出そう(状況が進まないので)
“ まとめ
Knowledge ▷ テストで油断しない ◦ iOSのマイナーバージョンアップ動作確認 ◦ 実機デバイス毎の動作確認 ▷ 公式情報を頻繁にチェック ◦
公式ガイド類 ◦ Apple Developer Forums ▷ Appleを過信しない ◦ Sandbox環境の不安定さ ◦ 調べても解決せず、実装も間違ってなさそうなら、バグの可能性 つまり、当たり前のことをちゃんとやるのが大事 ...
“ - PR -
One more thing... ▷ エンジニア絶賛募集中!(仙台でも) ◦ 仙台では珍しい自社サービス ◦ サーバサイド/Android/iOS ◦
http://www.videomarket.co.jp/recruit/engineer/
ご清聴ありがとうございました 2017/12/26 SWWDC #34 asmz