全部产品

辅助弹窗接入

更新时间:2020-11-19 11:13

本章节介绍接入厂商通道后如何使用辅助弹窗。

概述

接入推送功能的App进程在后台被清理后会收不到推送通知;使用辅助弹窗后,可以借助设备的系统通道,保证在App后台被清理的情况下,仍能收到推送通知。辅助弹窗的通知展示效果和普通通知相同。

使用辅助弹窗后,通知将由设备系统托管弹出,点击通知栏将转跳到指定的Activity。

注意

辅助弹窗功能的使用依赖于厂商通道,请确保已集成最新的厂商通道SDK。

客户端配置

集成AndroidPopupActivity

  • 服务端指定辅助弹窗通道推送时,一定要指定通知点击后要打开的Activity,该Activity需继承自抽象类AndroidPopupActivity,否则无法获取到通知的相关信息,并且会影响通知到达率的统计;

    说明

    MiPushSystemNotificationActivity已废弃,小米、华为、OPPO等厂商通道弹窗统计集成AndroidPopupActivity

  • AndroidPopupActivity中提供抽象方法onSysNoticeOpened(),实现该方法后可获取到辅助弹窗通知的标题、内容和额外参数,在通知点击时触发,原本的通知回调onNotification()onNotificationOpened()不适用于辅助弹窗;

  • 指定打开的托管弹窗Activity在AndroidManifest.xml中注册时需要声明属性:android:exported=true

接入如下所示:

import com.alibaba.sdk.android.push.AndroidPopupActivity;
public class PopupPushActivity extends AndroidPopupActivity {
    static final String TAG = "PopupPushActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    /**
     * 实现通知打开回调方法,获取通知相关信息
     * @param title     标题
     * @param summary   内容
     * @param extMap    额外参数
     */
    @Override
    protected void onSysNoticeOpened(String title, String summary, Map<String, String> extMap) {
        Log.d("OnMiPushSysNoticeOpened, title: " + title + ", content: " + summary + ", extMap: " + extMap);
    }
}

任意Activity

自辅助通道SDK 3.2.3版本后,新增支持任意Activity都可以拿到厂商通知点击时的数据,实现过程如下。创建PopupNotifyClick实例,同时传入PopupNotifyClickListener接口,在PopupNotifyClick实例的onCreate方法传入context和点击通知指定启动ActivityIntent,解析完成后,会在PopupNotifyClickListener接口的onSysNoticeOpened回调标题、内容和额外参数。如示例:

public class XXXActivity extends Activity {

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        (new PopupNotifyClick(new PopupNotifyClickListener() {
            public void onSysNoticeOpened(String title, String summary, Map<String, String> extMap) {
                Log.d("xxx", "Receive notification, title: " + title + ", content: " + content + ", extraMap: " + extraMap);
            }
        })).onCreate(this, this.getIntent());
    }
}

服务端配置

服务端可以使用OpenAPI,也可以使用阿里云控制台。

注意

使用移动推送进行厂商通道推送时,服务端必须进行以下配置,服务端参数不设置,不会给厂商通道进行推送。

1、OpenAPI推送配置

  • OpenAPI 2.0的推送高级接口提供了AndroidPopupActivityAndroidPopupTitleAndroidPopupBody三个参数,分别用于设置辅助弹窗通知打开时跳转的Activity、通知标题以及通知内容(注意:StoreOffline参数也需要设置为true);

  • 辅助弹窗仅在当前厂商通道设备的应用后台进程被清理时生效,对非接入厂商通道设备和在线的设备不生效。

  • 当辅助弹窗生效时,推送接口的Title、Body、AndroidActivity以及额外参数设置中的功能性设置(如声音、震动等)都不起作用;

服务端配置示例:

PushRequest pushRequest = new PushRequest();
// 其余设置省略
// 通知
pushRequest.setPushType("NOTICE");
// 标题
pushRequest.setTitle(dateFormat.format(new Date()));
// 内容
pushRequest.setBody("PushRequest body");
// 额外参数
pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}");
// 设置辅助弹窗打开Activity,填写Activity类名,需包名+类名
pushRequest.setAndroidPopupActivity("*****");
// 设置辅助弹窗通知标题
pushRequest.setAndroidPopupTitle("*****");
// 设置辅助弹窗通知内容
pushRequest.setAndroidPopupBody("*****");
// 72小时后消息失效, 不会再发送
String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 72 * 3600 * 1000)); 
pushRequest.setExpireTime(expireTime);
// 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
pushRequest.setStoreOffline(true); 
//推送消息类型时,设置true,设备离线时会自动把消息转成辅助通道的通知
pushRequest.setAndroidRemind(true);

2、阿里云控制台推送配置

登录移动研发平台EMAS,选择移动推送后选择对应的应用,在左侧导航栏选择创建消息>推送通知,在高级设置(选填)中,设置厂商通道必要参数,如下图所示。

辅助通道控制台配置