ページ

2016年10月27日木曜日

Realm mobile platform アプリ作成 - Android -


前回、RealmサーバーにiOSで作成したアプリと同期が取れている事を確認しました。
今回はAndroidアプリを作成し、iOS->Realmサーバー->Androidで同期を取ってみたいと思います。
とりあえず今回はログインまでをやってみます。

Androidアプリ開発準備


開発環境
Android Studio 2.2.2
プロジェクト作成&Realmインストール

まずはプロジェクトを作成。minSdkVersionは19、targetSdkVersionは23
Activity追加ではEmpty Activityを選択しました。

早速Realmをインストールしていきます。
まずはトップにあるbuild.gradleのdependenciesに↓を追加。
dependencies {
    classpath "io.realm:realm-gradle-plugin:2.0.2"
}
次にapp/build.gradleに↓を追加します。
apply plugin: 'realm-android'

realm {
    syncEnabled = true
}
syncEnabled = trueにしないとObjectServer関連が使えないので注意!!
最後にbuild.gradleを修正した際に右上に表示されるSync Nowをクリック。
Realmがインストールされます。


ログイン画面作成


Realmサーバーにログインするまでを実装してみたいと思います。
  • Applicationクラス作成
Realm関係の初期化を行う為にApplicationクラスを継承した
クラスを作成します。今回はMyApplicationクラスにします。
作成したMyApplicationクラスのonCreateを以下のようにオーバーライドします。
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Realm.init(this);
    }
}
次にAndroidManifest.xmlandroid:name=".MyApplication"を追加します。
<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:name=".MyApplication" // ☆ここ
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
      ・・・
    </activity>
</application>
とりあえず今回はMainActivityonCreateでログイン処理を実施します。
public class MainActivity extends AppCompatActivity {

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // [1]
        Credentials creds = Credentials.usernamePassword("ユーザー名", "パスワード", false);

        String authUrl = "http://10.0.2.2:9080/auth"; // [2]
        User.Callback callback = new User.Callback() {
            @Override
            public void onSuccess(User user) {
                Log.i(TAG, "Login success.");
            }

            @Override
            public void onError(ObjectServerError error) {
                String errorMsg;
                switch (error.getErrorCode()) {
                    case UNKNOWN_ACCOUNT:
                        errorMsg = "Account does not exists.";
                        break;
                    case INVALID_CREDENTIALS:
                        errorMsg = "User name and password does not match";
                        break;
                    default:
                        errorMsg = error.toString();
                }
                Log.e(TAG, errorMsg);
            }
        };
        User.loginAsync(creds, authUrl, callback);
    }
}
[1]のusernamePasswordメソッド第三引数をtrueにするとユーザー新規作成
falseにするとログインになります。
[2]でhttp://10.0.2.2:9080/authとしてますが、
これはエミュレータ上でlocalhostにアクセスするには10.0.2.2
する必要がある為、このIPアドレスにしています。
この状態でRealm Object Serverを立ち上げて実行し、
ログに「Login success.」が表示されればOKです。

0 件のコメント:

コメントを投稿