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
890
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
310
React Native+Expoで始めるWebフロント開発
asmz
0
800
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
940
OK Google, Deploy the iOS app
asmz
1
1k
Cooperate with Adobe XD, Zeplin and Xcode
asmz
1
3.2k
phpconsen LT
asmz
0
850
Other Decks in Technology
See All in Technology
DatadogのBits Chatが開発組織にもたらしたもの / What Bits Chat Has Brought Us
sms_tech
1
290
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
2
460
AI-DLC実践録_フルサイクル開発への挑戦
miyuc
0
350
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
480
作って理解するCoding Agent 〜フレームワークに頼らないピュア Python での実装〜
takapy
3
940
平文パスワードはログに“残り” ── 肝心の侵入は“痕跡すら残らない”
kuroneko13
0
120
Rust×eBPFでEDRっぽいものをつくる
sunlife3
2
760
[potatotips #96] Give Your AI Agent the Flutter Playbook
korodroid
0
130
AIペネトレーションテスト・ セキュリティ検証「AgenticSec」紹介資料
laysakura
2
9.3k
Android skills に学ぶ
kokiko
0
140
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
120
【GCC2026】鉄拳8でのVFX開発事例
bandainamcostudios
PRO
0
200
Featured
See All Featured
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Designing for Performance
lara
611
70k
WENDY [Excerpt]
tessaabrams
11
39k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
930
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
380
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
The Cost Of JavaScript in 2023
addyosmani
55
10k
What does AI have to do with Human Rights?
axbom
PRO
1
2.3k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
500
How to make the Groovebox
asonas
2
2.3k
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