プログラムの実装

設定後、アプリケーションに初期化処理とプッシュメッセージの受信ハンドラーを追加します。

初期化処理の追加

初期化処理の例は以下のようになります。サンプルプロジェクトでは、メインとなる Activity が作成されたタイミングで実行するようにしています。

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    // Initialize JPush interface
    JPushInterface.init(this);

    // If the id is saved in the preference, it skip the registration and just install push.
    String regId = JPushPreference.getRegistrationId(this.getApplicationContext());
    if (regId.isEmpty()) {
      registerJPush();
    }
  }

  @Override
  protected void onResume() {
    super.onResume();
    JPushInterface.onResume(this);
  }

  @Override
  protected void onPause() {
    JPushInterface.onPause(this);
    super.onPause();
  }

  private void registerJPush() {
    JPushInterface.resumePush(this.getApplicationContext());
    final String regId = JPushInterface.getUdid(this.getApplicationContext());
    JPushInterface.setAlias(this.getApplicationContext(), regId, null);

    // login
    String username = "user1";
    String password = "123ABC";
    KiiUser.logIn(new KiiUserCallBack() {
      public void onLoginCompleted(int token, KiiUser user, Exception e) {
        if (e != null) {
          Toast.makeText(MainActivity.this, "Error login: " + e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
          return;
        }
        // install user device
        boolean development = true;
        KiiUser.pushInstallation(PushBackend.JPUSH, development).install(regId, new KiiPushCallBack() {
          public void onInstallCompleted(int taskId, Exception e) {
            if (e != null) {
              Toast.makeText(MainActivity.this, "Error install: " + e.getLocalizedMessage(), Toast.LENGTH_SHORT).show();
              return;
            }
            // if all succeeded, save registration ID to preference.
            JPushPreference.setRegistrationId(MainActivity.this.getApplicationContext(), regId);
          }
        });
      }
    }, username, password);
  }
  ...
}

JPush を利用するには、デバイスを JPush サーバーに登録して登録 ID を取得する必要があります。

はじめに、JPushInterface.init() によって、JPush の呼び出しに必要なインターフェイスを初期化します。

JPushPreference は SharedPreferences に JPush から取得した登録 ID を文字列として保存または取得するための独自クラスです。一度 JPush から取得した登録 ID は、利用し続けることができます。登録 ID は SharedPreferences に保存しておき、初回起動時にだけ getUdid() で登録 ID を取得するようにします。

登録 ID の取得処理は、registerJPush() で実装されています。JPushInterface.getUdid() によって登録 ID を取得します。

usernamepassword にテストで使用する Kii Cloud のユーザー情報を設定しています。アプリ作成時 にテストで作成したユーザーは、ユーザー名が user1、パスワードが 123ABC です。

このコードでは、開発用のプッシュ通知環境で初期化しています。配布用の場合は、development を false にします。

上のコードで、JPushPreference は以下のような実装を想定しています。取得した登録 ID を Android の SharedPrefernces に保存または取得します。

class JPushPreference {
  private static final String PREFERENCE_NAME = "KiiTest";
  private static final String PROPERTY_REG_ID = "JPushRegId";

  static String getRegistrationId(Context context) {
    SharedPreferences prefs = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
    String registrationId = prefs.getString(PROPERTY_REG_ID, "");
    return registrationId;
  }

  static void setRegistrationId(Context context, String regId) {
    SharedPreferences prefs = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(PROPERTY_REG_ID, regId);
    editor.commit();
  }
}

受信ハンドラーの追加

JPush でプッシュメッセージを受信したときは、BroadcastReceiver が呼び出されます。これは、AndroidManifest.xml に記述したクラスです。

Kii Cloud からのプッシュメッセージは、次のようなクラスで処理できます。新規クラスを作成後に下記のコードを埋め込み、import の設定を行ってください。

public class KiiPushBroadcastReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    String jpushMessageType = intent.getAction();
    if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(jpushMessageType)) {
      Bundle extras = intent.getExtras();
      ReceivedMessage message = PushMessageBundleHelper.parse(extras);
      KiiUser sender = message.getSender();
      MessageType type = message.pushMessageType();
      switch (type) {
      case PUSH_TO_APP:
        PushToAppMessage appMsg = (PushToAppMessage)message;
        ...
        break;
      case PUSH_TO_USER:
        PushToUserMessage userMsg = (PushToUserMessage)message;
        ...
        break;
      case DIRECT_PUSH:
        DirectPushMessage directMsg = (DirectPushMessage)message;
        ...
        break;
      }
    }
  }
}

このサンプルはスケルトンのみを示しています。実際にテストする際には、コード上の ... の箇所にログ出力やユーザーインターフェイスとの連携処理を記述するか、デバッガでブレークポイントを設定するなどして、プッシュ通知を受け取ったことが分かるようにしておきます。

以上で全ての実装作業は完了です。次のステップ テストメッセージの送信 で実際にテストメッセージを送信してみましょう。


<< マニフェストの設定 テストメッセージの送信 >>