プログラムの実装
設定後、アプリケーションに初期化処理とプッシュメッセージの受信ハンドラーを追加します。
初期化処理の追加
初期化処理の例は以下のようになります。サンプルプロジェクトでは、メインとなる 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 を取得します。
username
と password
にテストで使用する 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;
}
}
}
}
このサンプルはスケルトンのみを示しています。実際にテストする際には、コード上の ...
の箇所にログ出力やユーザーインターフェイスとの連携処理を記述するか、デバッガでブレークポイントを設定するなどして、プッシュ通知を受け取ったことが分かるようにしておきます。
以上で全ての実装作業は完了です。次のステップ テストメッセージの送信 で実際にテストメッセージを送信してみましょう。
<< マニフェストの設定 | テストメッセージの送信 >> |