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
SWWDC 34
Search
asmz
December 27, 2017
Technology
870
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.4k
モバイルアプリ開発へE2Eテストを導入しよう
asmz
0
290
React Native+Expoで始めるWebフロント開発
asmz
0
770
UIデザインを考える全ての人たちに捧げる Apple Human Interface Guidelinesのススメ
asmz
1
2.8k
Overview of Swift and iOS App development
asmz
0
1.4k
How to get mobile app logs using Firebase Crashlytics
asmz
0
930
OK Google, Deploy the iOS app
asmz
1
1k
Cooperate with Adobe XD, Zeplin and Xcode
asmz
1
3.2k
phpconsen LT
asmz
0
840
Other Decks in Technology
See All in Technology
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
440
2026-06-24_人とAIの責務分離に基づく開発プロセスの提案.pdf
takahiromatsui
0
220
OTel × Datadog で 「AI活用」を計測し、改善に繋げる
shihochan
2
1k
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
4
790
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
300
MUSUBI 田中裕一『AIと共に行う「しごとのリデザイン」- スモールバックオフィス編』AI Ops Lab #4
musubi
0
320
Microsoft のサポートとフィードバック総まとめ
murachiakira
PRO
0
110
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
350
2026 AI Memory Architecture
nagatsu
0
440
AI-DLCを “そのまま導入しなかった”話 ~組織に合わせてアジャストした 私たちの実践共有~
hiroramos4
PRO
1
430
AIは、人間らしい仕事の夢を見るか?─ AI時代のtoB/toEプロダクトを再設計する
techtekt
PRO
0
140
From Prompt Engineering to Loop Engineering
shibuiwilliam
1
260
Featured
See All Featured
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
My Coaching Mixtape
mlcsv
0
150
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Code Reviewing Like a Champion
maltzj
528
40k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
First, design no harm
axbom
PRO
2
1.2k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Producing Creativity
orderedlist
PRO
348
40k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
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