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.5k
モバイルアプリ開発へE2Eテストを導入しよう
asmz
0
320
React Native+Expoで始めるWebフロント開発
asmz
0
820
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
iOSDC Japan 2026 day1 TrackC 10:50
feedtailor
1
160
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
160
Genieを崇めよ
kameitomohiro
0
130
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
240
[2026-09-11]SREは誰のもの?運用エンジニアが始める 「SRE領域への越境」とチームの進化の軌跡 〜Road to NEXT CRE
tosite
0
250
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
160
Reactの設計論
uhyo
24
13k
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
470
What the customer really needed
kawaguti
PRO
2
170
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
4
1.7k
おい、エージェントを使って終わらせろ
nwiizo
0
250
山手線を徒歩で一周してわかった、 位置情報アプリは「足」が最強のデバッガー
hinakko
0
160
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
690
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
590
Navigating Team Friction
lara
192
16k
Thoughts on Productivity
jonyablonski
76
5.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
Embracing the Ebb and Flow
colly
88
5.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
720
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
460
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
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