Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Realm Cloudを使ったオフラインファーストなアプリ開発

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Realm Cloudを使ったオフラインファーストなアプリ開発

Avatar for Wataru Mizukami

Wataru Mizukami

March 18, 2019
Tweet

More Decks by Wataru Mizukami

Other Decks in Technology

Transcript

  1. 実践: インスタンス設定 アプリからRealm Cloudへログインす る方式を選択 - おすすめはJWT方式 - 注) 別途JWTを発行するサーバーを自

    前で用意するのが面倒。 - デフォルトでNicknameやAnonymous方 式が有効になっているので無効にする のを忘れずに
  2. 実践: スキーマ定義 open class Test1( @PrimaryKey var testId: Int =

    0, var testList: RealmList<Test2>? = null ): RealmObject()
  3. 実践: スキーマ定義 open class Test1( @PrimaryKey var testId: Int =

    0, var testList: RealmList<Test2>? = null ): RealmObject() - Openでスキーマクラスを定義 - RealmObjectを継承する
  4. 実践: スキーマ定義 open class Test1( @PrimaryKey var testId: Int =

    0, var testList: RealmList<Test2>? = null ): RealmObject() - 主キーにはPrimaryKeyアノ テーションを付与 - 必ず一つ主キーを保つ必要 がある - 複合キーは出来ないので注 意
  5. 実践: スキーマ定義 open class Test1( @PrimaryKey var testId: Int =

    0, var testList: RealmList<Test2>? = null ): RealmObject() リレーションはRealmListで定義
  6. 実践: アプリからRealm Cloudへのログイン val credentials = SyncCredentials.jwt(“authToken”) SyncUser.logInAsync(credentials, "https://${getString(R.string.realm_instance_address)}/auth", object

    : SyncUser.Callback<SyncUser> { override fun onSuccess(result: SyncUser) { // ログイン成功した場合の処理 } override fun onError(error: ObjectServerError) {} })
  7. 実践: アプリからRealm Cloudへのログイン val credentials = SyncCredentials.jwt(“authToken”) SyncUser.logInAsync(credentials, "https://${getString(R.string.realm_instance_address)}/auth", object

    : SyncUser.Callback<SyncUser> { override fun onSuccess(result: SyncUser) { // ログイン成功した場合の処理 } override fun onError(error: ObjectServerError) {} }) この例ではJWT認証を利用
  8. 実践: アプリからRealm Cloudへのログイン val credentials = SyncCredentials.jwt(“authToken”) SyncUser.logInAsync(credentials, "https://${getString(R.string.realm_instance_address)}/auth", object

    : SyncUser.Callback<SyncUser> { override fun onSuccess(result: SyncUser) { // ログイン成功した場合の処理 } override fun onError(error: ObjectServerError) {} }) 非同期でログイン処理を行う
  9. 実践: おまけ Realm.getInstanceAsync(requireNotNull(Realm.getDefaultConfiguration()), object : Realm.Callback() { override fun onSuccess(result:

    Realm) { result.executeTransactionAsync { realm -> var test1 = realm.where(Test1::class.java).equalTo("testId",1.toInt()).findFirst() test1 ?: run { realm.insertOrUpdate(Test1()) } } } })
  10. 実践: おまけ Realm.getInstanceAsync(requireNotNull(Realm.getDefaultConfiguration()), object : Realm.Callback() { override fun onSuccess(result:

    Realm) { result.executeTransactionAsync { realm -> var test1 = realm.where(Test1::class.java).equalTo("testId",1.toInt()).findFirst() test1 ?: run { realm.insertOrUpdate(Test1()) } } } }) - 非同期でインスタンスを取得
  11. 実践: おまけ Realm.getInstanceAsync(requireNotNull(Realm.getDefaultConfiguration()), object : Realm.Callback() { override fun onSuccess(result:

    Realm) { result.executeTransactionAsync { realm -> var test1 = realm.where(Test1::class.java).equalTo("testId",1.toInt()).findFirst() test1 ?: run { realm.insertOrUpdate(Test1()) } } } }) - このブロック内では最後自動 的にコミットされる
  12. 実践: おまけ Realm.getInstanceAsync(requireNotNull(Realm.getDefaultConfiguration()), object : Realm.Callback() { override fun onSuccess(result:

    Realm) { result.executeTransactionAsync { realm -> var test1 = realm.where(Test1::class.java).equalTo("testId",1.toInt()).findFirst() test1 ?: run { realm.insertOrUpdate(Test1()) } } } }) - testId1のデータを取得
  13. 実践: おまけ Realm.getInstanceAsync(requireNotNull(Realm.getDefaultConfiguration()), object : Realm.Callback() { override fun onSuccess(result:

    Realm) { result.executeTransactionAsync { realm -> var test1 = realm.where(Test1::class.java).equalTo("testId",1.toInt()).findFirst() test1 ?: run { realm.insertOrUpdate(Test1()) } } } }) - testId1がなかったら作成して Insert