모피어스 Push basic notification을 커스텀하는 경우 사용되는 class
PUSH 5.1 : morpheus_push_library_5.1.2.14.버전 이상 사용가능
PUSH 5.2 : morpheus_push_library_5.1.2.16 버전 이상 사용가능
notification 생성 후 아이템 클릭 시 아래 화면으로 이동.
1. MADP
- 앱이 종료되어있는 경우 = startpage호출, 페이로드 전달 : M.data.param("notiData")
- 앱이 실행중인 경우 = function onReceiveNotification(ns)함수 호출
2. 기타 푸시 플러그인
- AndroidManifest.xml의 intent-filter 카테고리가 LAUNCHER로 지정되어있는 액티비티(메인런처)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PushManager.getInstance().setCustomInstance(this, [CustomNoti클래스명].class);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PushManager.getInstance().clearCustomInstance(this);
}
public class [커스텀노티클래스] {
//showNotification 메서드 필수 작성
//클래스 파일명은 변경되어도 문제되지 않으나, 클래스 하단에 showNotification 메서드는 필수로 작성해야함.
public NotificationBuilder showNotification(Intent intent, Context context) throws Exception{
//intent로 전달받은 페이로드 데이터
String jsonData = intent.getExtras().getString("JSON");
String psid = intent.getExtras().getString("PSID");
String encryptData = intent.getExtras().getString("message_encrypt");
JSONObject jsonObject = new JSONObject(jsonData);
JSONObject apsJsonObj = jsonObject.getJSONObject("aps");
JSONObject mpsJsonObj = jsonObject.getJSONObject("mps");
String extData = "";
if (mpsJsonObj.has("ext")) {
extData = mpsJsonObj.optString("ext");
System.out.println("extData: " + extData);
}
//페이로드 데이터를 가공하거나 기타 처리
//NotificationBuilder return
return createCustomNotification(context,jsonObject,psid,extData);
}
private NotificationBuilder createCustomNotification(final Context context, final JSONObject jsonMsg, final String psid, String message) {
ArrayList<String> params = null;
if (message != null) {
String[] paramArray = message.split("\\|");
params = new ArrayList<String>(Arrays.asList(paramArray));
}
int icon = context.getResources().getIdentifier("ic_launcher", "mipmap", context.getPackageName());
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationBuilder builder = new NotificationBuilder();
builder.setAutoCancel(true);
builder.setContentTitle("페이로드 타이틀");
builder.setContentText("페이로드 텍스트");
builder.setSmallIcon(icon);
builder.setSound(soundUri);
builder.setPriority(Notification.PRIORITY_MAX);
builder.setDefaults(Notification.DEFAULT_VIBRATE);
return builder;
}
}
Bitmap largeIcon = BitmapFactory.decodeResource(context.getResources(), R.drawable.start_bg);
NotificationCompat.BigPictureStyle style = new NotificationCompat.BigPictureStyle();
style.setBigContentTitle(타이틀);
style.setSummaryText(텍스트);
style.bigPicture(largeIcon);//style로도 LargeIcon 적용 가능
//그 외 기타 style세팅 (Android NotificationCompat.Style 참고)
NotificationBuilder builder = new NotificationBuilder();
builder.setStyle(style);
String NOTIFICATION_CHANNEL_ID = context.getPackageName();
NotificationBuilder builder = new NotificationBuilder();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel("NOTIFICATION_CHANNEL_ID", "CHANNEL_NAME", NotificationManager.IMPORTANCE_HIGH);
//channel.xxx.. 등 NotificationChannel 설정...
channel.setDescription(context.getPackageName());
channel.enableLights(true);
channel.setLightColor(Color.RED);
channel.enableVibration(true);
builder.setChannel(channel);//NotificationChannel 세팅
builder.setChannelId(NOTIFICATION_CHANNEL_ID); 채널 ID
}
boolean isRunningApp = PushUtils.isRunningPushApps(context);
Intent intent = new Intent(context, [notification 선택 시 이동할 클래스].class);
intent.putExtra("PUSH_TYPE", "FCM");
intent.putExtra("PUSH_STATUS", (isRunningApp) ? PushConstants.APP_STATUS_ACTIVE : PushConstants.APP_STATUS_BACKGROUND);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.putExtra("JSON", jsonMsg.toString());
intent.putExtra("PS_ID", psid);
intent.putExtra("TITLE", [타이틀]);
intent.putExtra("ENCRYPT", [encryptData]);
intent.putExtra("EXT", [ext]);
PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
NotificationBuilder builder = new NotificationBuilder();
builder.setContentIntent(pIntent);