モバイルアプリとサーバのデータ同期に関するetc

BaaS、MBaaSというソリューションが注目されているらしい。

モバイルアプリを作っているとデータ同期やユーザー認証などが、疎結合なapiの形でほぼ共通化されている。だったらまとめてサービスとして提供した方が早いと思ったのがきっかけだと思うが、どう考えてもオープンソースのフレームワーク化してAWSに吸収されて終わるような気もするのだが、それはそれとして、なかなかそういうのを思いついて実行に移すのが賢いなあ。

・ユーザー認証
・データストレージ&Sync
・通知
・コミュニケーション&シェア

とかだったら、FacebookとかTwitterがそういうのを提供しても面白いかもね。OpenIDの発展版というか。と思ったら、認証+ストレージを持っているDropboxがそういうアプローチを進めているらしい…が、Dropboxアカウントを使わせるというメタファそのものが、データ保存のメタファなので、ネイティブにはしづらいかな。Dropboxにはコミュニケーションがないからね。iCloudと変わらんというか。

まぁでも、こういうサービスが沢山出てくるということはライトゲームで一発当てるような感じで、サーバサイドは管理したくない(できない)というケースが結構多いのかな。アプリ開発はフロントエンド側で割り切ってる方もいますし、そういう人にはこれ幸いなのかな。

さて、僕が作っているShopCard.meでは、「吉祥寺の路面店みたいなお店の奥は電波が通じない」というユーザビリティ上の理由で、データは出来る限りローカルに一旦保存し、後からサーバに送りつける仕組みを導入し、会員登録などは一切不要な形で提供しました。

そうすると今度は、Webサーバと端末間でデータ同期する仕組みがないと、うっかりアプリを削除するとデータが消えて悲しいという理由から、サーバにid,passを登録しアカウントを作ることで、後からデータを復帰させたり、端末間でお店のデータを同期する機能を、最近リリースしたVer1.10でようやく実装しました。

現状の問題は、その機能をユーザーさんに見つけてもらうのが難しいという部分。結局、ユーザー登録なんて不要なんだよなぁと思いつつ、普及に勤しむわけです。

サーバ側のデータベースの構造としては、アプリ単位=端末単位で「users」というテーブルが存在し、アプリ起動時に、パスワードなどなく自動的にサーバにレコードを生成します。そこにソーシャルアカウントなどを後から紐付け可能な形で作っています。

iTunesをあんまり使わない人が機種変するとUserDataのバックアップがなかったりしてデータが復帰できません、そうするとサーバ側のUsersレコードがゴミになるので、それをid,passで生きながらえる仕組みとして、「web_users」というテーブルを作りました。

ShopCard.meの「設定画面」から「クラウド連携」を選び、id,passを登録すると、そういうユーザーができあがります。

その後、別のiPhoneやiPadで、同じid,passでログインすると、二つ目の端末も「web_users」配下に登録され、web_usersから見ると両者のデータはマージされ、相互に同期をかけるという仕組みになっています。

まだpushではなく、アプリケーションから定期的にpullしにいく仕組みでシンプルにやっています。iPadでお店の評価を変えただけで、iPhoneにpush通知されたらウザいですもんね。

「web_users」が、親のカテゴリになって、端末単位の「users」が下に紐づくという構造に変えたということです。テーブル名からわかるとおりShopCard.meのWebからログインすると、登録されている端末の管理機能や登録されたカードが見えたりします。

想定としては1人のユーザーがiPhone、iPadを同期させるのに使うことを前提としているんですが、ソーシャルアカウントの紐付けなどは端末単位(つまりUsers)で設定できるようにしてあります。

これはユーザーアカウント情報まで同期し、上書きすることが怖いなと思ったからなんですが、その分、同じデータを複数人で同期するという使い方があっても良いかななんて思って作っています。

「お店のお気に入り情報」「訪問履歴」「お店の評価」「プライベートメモ」だけが端末間で同期され、「訪問履歴」などは、「いつ」「だれ(どの端末)が登録したのか」ということがわかるようになっています。

と、なかなかそう思って作っても、まだまだこれからのアプリですから、ユーザーさんに気がついてもらえるかわからない可能性も高いので、ひとりごとのようにブログで書いておきましたw

とにかく「お店を登録したくなる」ところから訴求できないと、こんな機能いりませんからね。
Facebookのタイムラインでfoursquareでお店情報を送ってる人を見てると、ここからどうやって剥がせるかなぁなんて思ってます。

がんばろ。

さて、管理側でweb_usersを紐付ける仕組みを作って、過去にアプリを削除して、データ消しちゃった人を救い出す機能をつくらなきゃ。

こちらの記事もよろしかったら! “実はGoogle検索クライアントであるiPhoneアプリShopCard.me”

【PR】ご意見、感想などは是非、mstdn.fmのローカルタイムラインでお聞かせください