Tencent Push Notification (QQ) 2020年11月サービス終了
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-push-fcm:1.9.4'
...
}
repositories {
google()
mavenCentral()
}
dependencies {
implementation 'com.nhncloud.android:nhncloud-push-adm:1.9.4'
...
}
buildscript {
// ...
dependencies {
// ...
classpath "com.google.gms:google-services:$google_services_version" // google-services plugin
}
}
allprojects {
// ...
repositories {
// ...
google() // Google's Maven repository
}
}
apply plugin: 'com.android.application'
android {
// ...
}
// ADD THIS AT THE BOTTOM
apply plugin: 'com.google.gms.google-services'
dependencies {
//...
compileOnly files('amazon/libs/amazon-device-messaging-1.2.0.jar')
}
-libraryjars amazon/libs/amazon-device-messaging-1.2.0.jar
-dontwarn com.amazon.device.messaging.**
-keep class com.amazon.device.messaging.** { *; }
-keep public class * extends com.amazon.device.messaging.ADMMessageReceiver
-keep public class * extends com.amazon.device.messaging.ADMMessageHandlerBase
-keep public class * extends com.amazon.device.messaging.ADMMessageHandlerJobBase
NhnCloudPushConfiguration configuration =
NhnCloudPushConfiguration.newBuilder(context, "YOUR_APP_KEY")
.build();
NhnCloudPush.initialize(PushType.FCM, configuration);
NhnCloudPushConfiguration configuration =
NhnCloudPushConfiguration.newBuilder(context, "YOUR_APP_KEY")
.build();
NhnCloudPush.initialize(PushType.ADM, configuration);
NhnCloudPush.initialize(NhnCloudPushConfiguration)はDeprecatedされました。 NhnCloudPush.initialize(NhnCloudPushConfiguration)を使用して初期化する場合PushTypeは自動的にFCMに設定されます。
public void onLogin(String userId) {
// Login.
NhnCloudSdk.setUserId(userId);
// トークン登録など
}
NhnCloudPushAgreement agreement = NhnCloudPushAgreement.newBuilder(true) // 通知を受信するか
.setAllowAdvertisements(true) // 広告を受信するか
.setAllowNightAdvertisements(true) // 夜間広告を受信するか
.build();
NhnCloudPush.registerToken(context, agreement, new RegisterTokenCallback() {
@Override
public void onRegister(@NonNull PushResult result,
@Nullable String token) {
if (result.isSuccess()) {
// トークン登録成功
} else {
// トークン登録失敗
int code = result.getCode();
String message = result.getMessage();
}
}
});
NhnCloudPush.queryTokenInfo(ㅊontext, new QueryTokenInfoCallback() {
@Override
public void onQuery(@NonNull PushResult result, @Nullable TokenInfo tokenInfo) {
if (result.isSuccess()) {
// トークン情報照会成功
String token = tokenInfo.getToken();
NhnCloudPushAgreement agreement = tokenInfo.getAgreement();
} else {
// トークン情報照会失敗
int code = result.getCode();
String message = result.getMessage();
}
}
});
サービスログアウト後にメッセージ受信をご希望にならなければトークンを解除しなければなりません。
トークンが解除されても端末のお知らせ権限は回収されません。
すでに解除されたトークンを解除すると、「既に解除されたトークンです(Already a token has been unregistered)」というメッセージと一緒に成功を返します。
NhnCloudPush.unregisterToken(mContext, new UnregisterTokenCallback() {
@Override
public void onUnregister(@NonNull PushResult result,
@Nullable String unregisteredToken) {
if (result.isSuccess()) {
// トークン解除成功
} else {
// トークン解除失敗
int code = result.getCode();
String message = result.getMessage();
}
}
});
Application#onCreate
に登録してください。メッセージを受信時にユーザーがアプリを使用中(Foreground)の場合、通知を表示しません。 Foregroundかどうかは、OnReceiveMessageListener#onReceiveに伝達されるisForegroundで確認できます。
public class MyApplication extends Application {
@Override
public void onCreate() {
// ...
NhnCloudPush.setOnReceiveMessageListener(new OnReceiveMessageListener() {
@Override
public void onReceive(@NonNull NhnCloudPushMessage message,
boolean isForeground) {
// ユーザーがアプリ使用中にも通知を表示
if (isForeground) {
NhnCloudNotification.notify(getApplicationContext(), message);
}
}
});
// ...
}
}
if (Build.VERSION.SDK_INT >= 33) {
NhnCloudNotification.requestPostNotificationsPermission(this, PERMISSION_REQUEST_CODE);
}
if (Build.VERSION.SDK_INT <= 32) {
NotificationChannel channel = NhnCloudNotification.getNotificationChannel(this);
if (channel == null) {
NhnCloudNotification.createNotificationChannel(this);
}
}
Application#onCreate
から登録する必要があります。public class MyApplication extends Application {
@Override
public void onCreate() {
// ...
NhnCloudNotification.setOnClickListener(new OnClickListener() {
@Override
public void onClick(@NonNull NhnCloudPushMessage message) {
// メッセージ内容に基づいてページ移動などのサービスロジック実行が可能です。
Map<String, String> extras = message.getExtras();
}
});
// ...
}
}
Application#onCreate
で登録したり、AndroidManifest.xmlファイルにメタデータとして定義できます。基本通知チャンネル名を設定しない場合、アプリケーション名で自動設定されます。
public class MyApplication extends Application {
@Override
public void onCreate() {
// ...
NhnCloudNotification.setDefaultChannelName(context, "YOUR_CHANNEL_NAME");
// ...
}
}
<!-- デフォルトチャンネルの名前設定 -->
<meta-data android:name="com.toast.sdk.push.notification.default_channel_name"
android:value="@string/default_notification_channel_name"/>
Application#onCreate
で登録したり、AndroidManifest.xmlファイルにメタデータとして定義できます。全通知オプションを変更する場合
public class MyApplication extends Application {
@Override
public void onCreate() {
// ...
NhnCloudNotificationOptions defaultOptions = new NhnCloudNotificationOptions.Builder()
.setPriority(NotificationCompat.PRIORITY_HIGH) // 通知優先順位設定
.setColor(0x0085AA) // 通知背景色設定
.setLights(Color.RED, 0, 300) // LEDライト設定
.setSmallIcon(R.drawable.ic_notification) // 小さなアイコン設定
.setSound(context, R.raw.dingdong1) // 通知音設定
.setVibratePattern(new long[] {500, 700, 1000}) // 振動パターン設定
.enableForeground(true) // フォアグラウンド通知表示設定
.enableBadge(true) // バッジアイコン使用設定
.build();
NhnCloudNotification.setDefaultOptions(context, defaultOptions);
// ...
}
}
設定された通知オプションの一部のみ変更する場合
public class MyApplication extends Application {
@Override
public void onCreate() {
// ...
// 設定済みの基本通知オプション取得
NhnCloudNotificationOptions defaultOptions = NhnCloudNotification.getDefaultOptions(context);
// 通知オプションオブジェクトからビルダー作成
NhnCloudNotificationOptions newDefaultOptions = defaultOptions.buildUpon()
.enableForeground(true) // フォアグラウンド通知の表示設定のみ変更
.build();
NhnCloudNotification.setDefaultOptions(context, newDefaultOptions);
// ...
}
}
<!-- 通知優先順位 -->
<meta-data android:name="com.toast.sdk.push.notification.default_priority"
android:value="1"/>
<!-- 通知背景色 -->
<meta-data android:name="com.toast.sdk.push.notification.default_background_color"
android:resource="@color/defaultNotificationColor"/>
<!-- LEDライト -->
<meta-data android:name="com.toast.sdk.push.notification.default_light_color"
android:value="#0000ff"/>
<meta-data android:name="com.toast.sdk.push.notification.default_light_on_ms"
android:value="0"/>
<meta-data android:name="com.toast.sdk.push.notification.default_light_off_ms"
android:value="500"/>
<!-- 小さなアイコン -->
<meta-data android:name="com.toast.sdk.push.notification.default_small_icon"
android:resource="@drawable/ic_notification"/>
<!-- 通知音 -->
<meta-data android:name="com.toast.sdk.push.notification.default_sound"
android:value="notification_sound"/>
<!-- 振動パターン -->
<meta-data android:name="com.toast.sdk.push.notification.default_vibrate_pattern"
android:resource="@array/default_vibrate_pattern"/>
<!-- バッジアイコン使用 -->
<meta-data android:name="com.toast.sdk.push.notification.badge_enabled"
android:value="true"/>
<!-- アプリ実行中の通知表示 -->
<meta-data android:name="com.toast.sdk.push.notification.foreground_enabled"
android:value="false"/>
タイプ | 機能 | アクション |
---|---|---|
アプリを開く (OPEN_APP) | アプリを実行します。 | PushAction.ActionType.OPEN_APP |
URLを開く (OPEN_URL) | URLで移動 (ウェブURLアドレスもしくはアプリカスタムスキームを実行) |
PushAction.ActionType.OPEN_URL |
返信 (REPLY) | 通知から返信を送ります。 | PushAction.ActionType.REPLY |
通知削除 (DISMISS) | 現在の通知を削除します。 | PushAction.ActionType.DISMISS |
ボタンは最大3個までサポートします。
ウェブ URL を使用すると、メディア ファイルのダウンロードに時間がかかります。
使用済み画像が1:1の比率ではない場合、強制的に1:1に変更されるため、期待とは異なる画像が露出されることがあります。
Application#onCreate
から登録する必要があります。public class MyApplication extends Application {
@Override
public void onCreate() {
// ...
NhnCloudNotification.setOnActionListener(new OnActionListener() {
@Override
public void onAction(@NonNull PushAction action) {
// 返信アクションの場合、サービスサーバーにその内容を転送
if (action.getActionType() == PushAction.ActionType.REPLY) {
// ユーザーが入力した返信内容を取得
String userText = action.getUserText();
// サービスサーバーにユーザー入力内容を送信
}
}
});
// ...
}
}
(注意) 1. onMessageReceived関数でメッセージ受信後に通知表示をリクエスト(notify)しないと、通知が表示されません。 2. 通知を直接作成する場合は、Pushサービスコンテンツを通知のコンテンツインテントとして設定することで、指標収集が可能になります。(以下の指標収集機能の追加セクション参照)
public class MyPushMessageReceiver extends NhnCloudPushMessageReceiver {
@Override
public void onMessageReceived(@NonNull Context context,
@NonNull NhnCloudRemoteMessage remoteMessage) {
// チャンネルID変更
remoteMessage.setChannelId("channel");
// メッセージ内容修正
NhnCloudPushMessage message = remoteMessage.getMessage();
CharSequence title = message.getTitle();
message.setTitle("[Modified] " + title);
// 実行インテント設定(未設定の場合、パッケージの基本メインアクティビティ実行)
Intent launchIntent = new Intent(context, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(
context,
REQUEST_CODE,
launchIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
// ユーザーがアプリ使用中の場合とそうでない場合を区別して通知を表示したい場合
if (!isAppForeground()) {
// 通知作成および表示
notify(context, remoteMessage, contentIntent);
} else {
// 特定UI画面の表示
NhnCloud.makeText(context, message.title, NhnCloud.LENGTH_SHORT).show();
}
}
}
(注意) 1. NhnCloudPushMessageReceiverを使う場合は、必ずpermissionを設定しなければなりません。 2. APIレベル31以上をターゲットとする時、exportedプロパティを設定する必要があります。
<manifest>
<application>
<receiver android:name=".NhnCloudPushSampleReceiver"
android:permission="${applicationId}.toast.push.permission.RECEIVE"
android:exported="false">
<intent-filter>
<action android:name="com.toast.android.push.MESSAGE_EVENT" />
</intent-filter>
</receiver>
<!-- 省略 -->
</application>
<!-- 省略 -->
</manifest>
public class MyPushMessageReceiver extends NhnCloudPushMessageReceiver {
private NotificationManager mManager = null;
@Override
public void onMessageReceived(
@NonNull Context context,
@NonNull NhnCloudRemoteMessage remoteMessage) {
// メッセージ内容の取得
NhnCloudPushMessage message = remoteMessage.getMessage();
//NotificationManagerの作成
if (mManager == null) {
mManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
if (mManager == null) {
Log.e(TAG, "Failed to get NotificationManager");
return;
}
}
// チャンネル設定
String channelId = "YOUR_CHANNEL_ID";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = mManager.getNotificationChannel(channelId);
if (channel == null) {
String channelName = "YOUR_CHANNEL_NAME";
createNotificationChannel(channelId, channelName);
}
}
// 実行インテントの設定
Intent launchIntent = new Intent(context, MainActivity.class);
// 指標転送を含むコンテンツインテントの作成
PendingIntent contentIntent;
contentIntent = getContentIntent(context, remoteMessage, launchIntent);
//通知作成
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId);
builder.setContentTitle(message.getTitle())
.setContentText(message.getBody())
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(contentIntent)
.setAutoCancel(true);
notify(context, NotificationUtils.createNewId(), builder.build());
}
...
}
(注意) 機器でサポートしていないemojiを使用した場合には、表示されないことがあります。
// 追加するタグIDリスト作成
Set<String> tagIds = new HashSet<>();
tagIds.add(TAG_ID_1); // e.g. "ZZPP00b6" (8桁の文字列)
tagIds.add(TAG_ID_2);
// ログインされているユーザーIDのタグIDリスト追加
NhnCloudPush.addUserTag(tagIds, new UserTagCallback() {
@Override
public void onResult(@NonNull PushResult result, @Nullable Set<String> tagIds) {
if (result.isSuccess()) {
// ユーザータグID追加成功
} else {
// ユーザータグID追加失敗
int errorCode = result.getCode();
String errorMessage = result.getMessage();
}
}
});
// ログインされているユーザーIDのタグIDリストアップデート(既存のタグIDリストは削除され、入力した値に設定)
NhnCloudPush.setUserTag(tagIds, new UserTagCallback() {
@Override
public void onResult(@NonNull PushResult result, @Nullable Set<String> tagIds) {
if (result.isSuccess()) {
// ユーザータグIDリストアップデート成功
} else {
// ユーザータグIDリストアップデート失敗
int errorCode = result.getCode();
String errorMessage = result.getMessage();
}
}
});
// ログインされているユーザーIDの全タグIDリストを返します。
NhnCloudPush.getUserTag(new UserTagCallback() {
@Override
public void onResult(@NonNull PushResult result, @Nullable Set<String> tagIds) {
if (result.isSuccess()) {
// ユーザータグIDリスト取得成功
} else {
// ユーザータグIDリスト取得失敗
int errorCode = result.getCode();
String errorMessage = result.getMessage();
}
}
});
// 削除するタグIDリスト作成
Set<String> tagIds = new HashSet<>();
tagIds.add(TAG_ID_1); // e.g. "ZZPP00b6" (8桁の文字列)
tagIds.add(TAG_ID_2);
// ログインされているユーザーIDのタグIDリスト削除
NhnCloudPush.removeUserTag(tagIds, new UserTagCallback() {
@Override
public void onResult(@NonNull PushResult result, @Nullable Set<String> tagIds) {
if (result.isSuccess()) {
// ユーザータグIDリスト削除成功
} else {
// ユーザータグIDリスト削除失敗
int errorCode = result.getCode();
String errorMessage = result.getMessage();
}
}
});
// ログインされているユーザーIDの全タグIDリスト削除
NhnCloudPush.removeAllUserTag(new UserTagCallback() {
@Override
public void onResult(@NonNull PushResult result, @Nullable Set<String> tagIds) {
if (result.isSuccess()) {
// 全ユーザータグ削除成功
} else {
// 全ユーザータグ削除失敗
int errorCode = result.getCode();
String errorMessage = result.getMessage();
}
}
});
/* NhnCloudPushConfiguration.java */
public String getAppKey();
public static Builder newBuilder(@NonNull Context context, @NonNull String appKey);
Method | Returns | |
---|---|---|
getAppKey | String | Pushサービスアプリキーを返します。 |
static newBuilder | NhnCloudPushConfiguration.Builder | NhnCloudPushConfigurationオブジェクト作成のためのビルダーを作成します。 |
/* PushResult.java */
public int getCode();
public String getMessage();
public boolean isSuccess();
public boolean isFailure();
Method | Returns | |
---|---|---|
getCode | int | 結果コードを返します。 |
getMessage | int | 結果メッセージを返します。 |
isSuccess | boolean | 成功したかを返します。 |
isFailure | boolean | 失敗したかを返します。 |
/* TokenInfo.java */
public String getPushType();
public NhnCloudPushAgreement getAgreement();
public String getTimeZone();
public String getCountry();
public String getLanguage();
public String getUserId();
public Date getActivatedDateTime();
public String getToken();
Method | Returns | |
---|---|---|
getPushType | String | Pushタイプを返します。 |
getAgreement | NhnCloudPushAgreement | 通知/広告/夜間広告などに同意しているかを返します。 |
getTimeZone | String | タイムゾーンを返します。 |
getCountry | String | 国コードを返します。 |
getLanguage | String | 言語コードを返します。 |
getUserId | String | ユーザーIDを返します。 |
getActivatedDateTime | Date | トークンの最近の登録日時を返します。 |
getToken | String | トークンを返します。 |
/* NhnCloudRemoteMessage.java */
public String getChannelId();
public void setChannelId(String channelId);
public NhnCloudPushMessage getMessage();
public String getSenderId();
Method | Returns | |
---|---|---|
getChannelId | String | チャンネルIDを返します。 |
setChannelId | チャンネルIDを設定します。 | |
getMessage | NhnCloudPushMessage | メッセージオブジェクトを返します。 |
getSenderId | String | 発信者 ID を返します (FCM Only) |
/* NhnCloudPushMessage.java */
public String getMessageId();
public String getPusyType();
public String getTitle();
public void setTitle(String title);
public String getBody();
public void setBody(String body);
public RichMessage getRichMessage();
public Map<String, String> getExtras();
Method | Returns | |
---|---|---|
getMessageId | String | メッセージ識別子を返します。 |
getPusyType | String | PushTypeを返します。 |
getTitle | String | メッセージタイトルを返します。 |
setTitle | メッセージタイトルを設定します。 | |
getBody | String | メッセージ内容を取得します。 |
setBody | メッセージ内容を設定します。 | |
getRichMessage | RichMessage | リッチメッセージ情報を返します。 |
getExtras | 受信したメッセージ全体を返します。 |
/* PushAction.java */
public ActionType getActionType();
public String getNotificationId();
public String getNotificationChannel();
public NhnCloudPushMessage getMessage();
public String getuserText();
Method | Returns | |
---|---|---|
getActionType | ActionType | ActionTypeを返します。 |
getNotificationId | String | アクションが実行された通知のIDを返します。 |
getNotificationChannel | String | アクションが実行された通知のチャンネルを返します。 |
getMessage | NhnCloudPushMessage | アクションが設定された通知のメッセージ情報を返します。 |
getuserText | RichMessage | ユーザーが入力した文字列を返します。 |
/* NhnCloudPushMessageReceiver.java */
public final boolean isAppForeground();
public final void notify(Context context, NhnCloudRemoteMessage message);
public final void notify(Context context, NhnCloudRemoteMessage message, PendingIntent contentIntent);
public final void notify(Context context, int notificationId, Notification notification);
@Deprecated
public final PendingIntent getNotificationServiceIntent(Context context, NhnCloudRemoteMessage message, PendingIntent contentIntent);
public final PendingIntent getContentIntent(Context context, NhnCloudRemoteMessage message, Intent launchIntent);
Method | Returns | Parameters | |
---|---|---|---|
isAppForeground | boolean | 現在アプリを使用中かどうかを返します。 | |
notify | Context, NhnCloudRemoteMessage | 基本実行インテントで通知を生成および表示します。 | |
notify | Context, NhnCloudRemoteMessage, PendingIntent | ユーザー実行インテントで通知を生成および表示します。 | |
notify | Context, int, Notification | ユーザー通知を特定のIDで表示します。 | |
@Deprecated getNotificationServiceIntent |
PendingIntent | Context, NhnCloudRemoteMessage, PendingIntent | 指標転送を含むユーザー実行インテントを返します。 Android 12 (APIレベル31)以上では正常に動作しないため、代わりにgetContentIntent()を使用する必要があります。 |
getContentIntent | PendingIntent | Context, NhnCloudRemoteMessage, Intent | 指標転送を含むユーザー実行インテントを返します。 |
/* NhnCloudNotificationOptions.java */
public int getPriority();
public int getSmallIcon();
public int getColor();
public int getLightColor();
public int getLightOnMs();
public int getLightOffMs();
public long[] getVibratePattern();
public Uri getSound();
public boolean isForegroundEnabled();
public boolean isBadgeEnabled();
public Builder buildUpon();
Method | Returns | Parameters | |
---|---|---|---|
getPriority | int | 優先順位を返します。 | |
getSmallIcon | int | 小アイコンのリソース識別子を返します。 | |
getColor | int | 背景色を返します。 | |
getLightColor | int | LEDの色を返します。 | |
getLightOnMs | int | LEDライトが点灯する時の時間を返します。 | |
getLightOffMs | int | LEDライトが消える時の時間を返します。 | |
getVibratePattern | long[] | 振動のパターンを返します。 | |
getSound | Uri | 通知音のUriを返します。 | |
isForegroundEnabled | boolean | フォアグラウンド通知の使用するかを返します。 | |
isBadgeEnabled | boolean | バッジアイコンの使用の有無を返します。 | |
buildUpon | NhnCloudNotificationOptions#Builder | 現在のオプション情報に基づき、ビルダーを返します。 |