package com.hdl.photovoltaic.push.aliyun; import android.content.Context; import android.util.Log; import com.alibaba.fastjson.JSON; import com.alibaba.sdk.android.push.MessageReceiver; import com.alibaba.sdk.android.push.notification.CPushMessage; import com.hdl.photovoltaic.other.HdlPushLogic; import com.hdl.photovoltaic.push.CustomNotification; import com.hdl.photovoltaic.push.PushMessageInfoBean; import com.hdl.photovoltaic.uni.HDLUniMPSDKManager; import java.util.Map; /** * 阿里云推送消息接收方法 * 文档地址(https://help.aliyun.com/document_detail/434669.html?scm=20140722.S_help%40%40%E6%96%87%E6%A1%A3%40%40434669._.ID_help%40%40%E6%96%87%E6%A1%A3%40%40434669-RL_onNotificationOpened-LOC_doc%7EUND%7Eab-OR_ser-PAR1_212a5d4017647281629576475d8240-V_4-PAR3_r-RE_new8-P0_1-P1_0&spm=a2c4g.11186623.help-search.i10#section-kk1-wnc-oyd) */ public class MyAliYunMessageReceiver extends MessageReceiver { private static final String TAG = "MyAliYunMessageReceiver"; /** * 触发场景:当通知到达设备时触发。注意:这个方法在通知被展示到通知栏之前调用。 * 参数说明: * * @param context:上下文 * @param title:通知标题 * @param content:通知内容 * @param extraMap:额外的参数,用于自定义key-value */ @Override protected void onNotification(Context context, String title, String content, Map extraMap) { Log.d(TAG, "onNotification: " + JSON.toJSONString(extraMap)); // CustomNotification.getInstance().messageDataProcessing(context, title, content, JSON.toJSONString(extraMap)); } /** * 触发场景:当应用内消息到达时触发。应用内消息不会展示在通知栏,而是直接传递给应用处理。通常用于应用内消息透传。 * 参数说明: * * @param context:上下文 * @param cPushMessage:消息对象,包含消息ID、标题、内容等。 */ @Override protected void onMessage(Context context, CPushMessage cPushMessage) { // String title = cPushMessage.getTitle(); // String content = cPushMessage.getContent(); // Log.d(TAG, "onMessage: " + JSON.toJSONString(cPushMessage)); // if (isForeground) { // //App处于前台,弹窗形式显示 // } else { // //App处于后台,通知形式显示 // } } /** * 触发场景:当用户点击通知栏中的通知时触发。 * 参数说明: * * @param context:上下文 * @param title:通知标题 * @param content:通知内容 * @param extra:额外的参数字符串(JSON格式) */ @Override protected void onNotificationOpened(Context context, String title, String content, String extra) { Log.d(TAG, "onNotificationOpened: " + "title=" + title + " content=" + content + " extra=" + extra); } /** * 触发场景:当用户点击通知栏中的通知,但是无法启动应用时触发(例如应用被强制停止)。 * 参数说明: * * @param context:上下文 * @param title:通知标题 * @param content:通知内容 * @param extra:额外的参数字符串(JSON格式) */ @Override protected void onNotificationClickedWithNoAction(Context context, String title, String content, String extra) { Log.d(TAG, "onNotificationClickedWithNoAction: " + "title=" + title + " content=" + content + " extra=" + extra); } /** * 触发场景:当通知被清除时触发。例如,用户清除了通知栏中的通知。 * 参数说明: * * @param context 上下文 * @param messageId 被清除的消息ID */ @Override protected void onNotificationRemoved(Context context, String messageId) { Log.d(TAG, "onNotificationClickedWithNoAction: " + "messageId=" + messageId); } /** * 触发场景:当通知在应用内展示时触发。这个方法在showNotificationNow方法返回false时会被调用,表示拦截了通知的默认展示,转而使用应用内展示。 * 参数说明: * * @param context:上下文 * @param title:通知标题 * @param content:通知内容 * @param extraMap:额外的参数 * @param openType:打开类型,例如打开应用、打开Activity、打开URL等(1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑。) * @param openActivity:需要打开的Activity(所要打开的activity的名称,仅当服务端参数openType=2时有效,其余情况为null。) * @param openUrl:需要打开的URL(所要打开的URL,仅当服务端参数openType=3时有效,其余情况为null。) */ @Override protected void onNotificationReceivedInApp(Context context, String title, String content, Map extraMap, int openType, String openActivity, String openUrl) { //这里可以处理下发的推送通知 Log.d(TAG, "onNotificationReceivedInApp:title=" + title + " content=" + content + " extraMap=" + JSON.toJSONString(extraMap) + " openType=" + openType + " openActivity=" + openActivity + " openUrl=" + openUrl); // CustomNotification.getInstance().messageDataProcessing(context, title, content, JSON.toJSONString(extraMap)); } /** * 触发场景:在通知即将展示时触发。这个方法允许你决定是否拦截通知的默认展示行为。 * 参数说明: * * @param context 上下文 * @param extraMap 额外的参数 * @return false表示拦截,true表示不拦截,请根据进行拦截,拦截后会执行到 onNotificationReceivedInApp */ @Override public boolean showNotificationNow(Context context, Map extraMap) { //false表示拦截,true表示不拦截,请根据进行拦截,拦截后会执行到 onNotificationReceivedInApp Log.d(TAG, "showNotificationNow:" + "extraMap=" + JSON.toJSONString(extraMap)); return !CustomNotification.getInstance().isAppInForegroundOrIsShowUniMP(context); // return false; } }