こんにちは、いつも書いている川田じゃない人です。
AppBank.netでお気に入りが消えてしまう不具合があったみたいで、アプリ開発者としては対岸の火事ではないなぁと思いつつ何が原因かを勝手に調査してみました。
起きたこと
AppBank.netを最新の1.1.3にアップデートしたら、お気に入りデータが消えてしまう不具合があるみたい。
公式の発表では、 AppBankアプリのアップデートでお気に入りやセール待ち情報が消えてしまう問題のお詫び とのこと。
公式からわかる情報
AppBankアプリのアップデートでお気に入りやセール待ち情報が消えてしまう問題のお詫び からわかる情報では以下の通り。
- AppBank.net アプリでは、販売元に紐付いた ID で、ユーザー様のお気に入り情報をサーバー側で管理
- 先日のアップデート時に、販売元を 旧会社 から AppBank Inc. に変更した
- お気に入り情報を復元する(再度、紐付きを行う)ことは困難と判断
アプリの挙動
ちゃんとは使ったことなかったので挙動を確認。
- お気に入りデータは、アプリを削除して再インストールしても保存されている
- 認証(Facebookとか)や独自ログインはない
「公式からわかる情報」からお気に入りデータはユニークなIDに紐付きサーバに保存しているので、ユーザは何も気にすることなくデータが永続化されている。素晴らしい!
パケットキャプチャ
GETでUIIDを送り、サーバに保存しているお気に入りデータを取得していた。
推測される原因
販売元(Vendor)が変わった時点で想像はついたけど、Keychainが原因ですね。
UIIDはアプリのインストール毎にIDが変わるけど、Keychain(Security.framework)を利用することで、同一のIDを生成できる。これがVendorが変わり生成方法が変わり、一意じゃなくなった。
回避方法考察
Vendor変更前に一旦お気に入りデータをローカルに保存し(NSUserDefaultとか)、Vendor変更後にサーバ側に反映する
iPhone,iPad両デバイスでお気に入りデータを共有するためにローカルに保存せず毎回サーバに確認しているっぽいので、ローカルに保存する必要がなかったんでしょうね。公式が復旧は困難言ってる通り、Vendor変更後ではどうやっても旧UIIDを生成する方法はないので、旧データとの紐付けは無理ですね・・・。
販売元を変更(App Transfer)ってそうそうやる機会がないので、開発者側が気づけず復旧も無理という状況を考えると・・・なんとも言えない気持ちになります。
まとめ
レビューは荒れてますね。推定67万ダウンロードですので・・・心中察します。
ユーザの利便性を考えてログイン不要な設計は素晴らしいですが、UIIDは注意が必要ということを理解した上で使用するしかないですよね。UDIDが利用禁止になった時に代替のIDをどうするかって話がでているなかでいろいろ賑わっていた気がします。
UDIDが使えなくなりそうなので、UIIDを使えるようにしました
あとは、App Transferって滅多に経験しないとは思いますが、結構落とし穴的な記事がでているのでここの調査不足も・・・。
【iOS】AppTransferしたらキーチェーンにアクセスできなくなった話
最後に一応書いておくけど、あくまでも推測なので鵜呑みにしないでね!
参考リンク
iOSでどんなIDが利用出来るかを思い出す時はここみてます。