ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

オフライン対応を考えよう

f:id:mbaasdevrel:20190410165859p:plain

mBaaSはインターネット接続ありきのサービスです。ネットワークが不安定だったり、オフラインだと多くの機能が利用できません。しかしユーザはそんなことには構わずデータを取得したり、保存したいと考えるでしょう。

そこで使ってみたいのがsaveEventuallyメソッドです。

iOSでの実装

データストアに保存するデモコードです。

let memo = NCMBObject.init(className: "Memo")
memo?.setObject("Test!", forKey: "Memo")
memo?.saveEventually({ error in
  if (error != nil) {
    print(error)
  } else {
    // 保存後の処理
    print("保存完了")
    print(memo)
  }
});

もしオフラインの状態で saveInBackground を使うと以下のようなエラーが返ってきます。

The Internet connection appears to be offline.

そこで saveInBackground を saveEventually に変更して実行します。そうするとエラーはなく、オブジェクトは以下のようになります。

保存完了
Optional({
  "acl" : {

  },
  "Memo" : "Test!"
})

内容を見て分かる通り、objectIdなどは入っていません。

注意点

objectIdがないので、それをキーにして処理を行っている場合には変更が必要です。オンラインになるとデータがアップロードされるはずなのですが、シミュレータではうまくイベントがキックされない場合があります。実機で確認してみてください。

なおsaveEventuallyはiOSのみの機能で、Android/JavaScript/Unityでは実装されていません。

まとめ

アプリにおいてオフライン対応は大事な要件になります。ネットワークがダメだったらエラーとしてしまうのも手ですし、saveEventuallyを使ってキューに保存するという手もありでしょう。アプリの要件に応じて最適な方を選択してください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。