wjc
1 天以前 b48b2ecc0882fb68ae0c6bd631bb5b913fe1428c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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<String, String> 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<String, String> 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<String, String> extraMap) {
        //false表示拦截,true表示不拦截,请根据进行拦截,拦截后会执行到 onNotificationReceivedInApp
        Log.d(TAG, "showNotificationNow:" + "extraMap=" + JSON.toJSONString(extraMap));
        return !CustomNotification.getInstance().isAppInForegroundOrIsShowUniMP(context);
//        return false;
    }
}