文档

辅助弹窗接入

更新时间:

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

概述

接入推送功能的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());
    }
}

辅助弹窗Activity启动模式说明

由于各个厂商系统的特性,设置不同启动模式,单击通知时的效果也不完全相同,有些厂商设备上部分启动模式也不符合原有启动效果。

首先说明,应用结束进程时,单击第一条离线通知,是必然会正常创建启动辅助弹窗Activity,所以无论使用AndroidPopupActivity还是自行使用PopupNotifyClick,均可以正常获取到通知数据。当单击一条离线通知启动了应用后,再次单击第二条离线通知,各启动模式和各厂商设备表现不完全相同,下面按照启动模式进行关键信息说说明:

  • Standard:如果已经启动的辅助弹窗Activity不finish,单击第二条通知,不会再次创建辅助弹窗Activity,部分厂商也不会触发已有辅助弹窗Activity的onNewInten方法,所以也无法使用PopupNotifyClick解析onNewInten方法的intent。如果辅助弹窗Activity finish了,单击第二条通知,均会重新创建辅助弹窗Activity,可以正常拿到通知数据。所以使用Standard启动模式时,建议及时将辅助弹窗Activity finish。

  • SingleTop:如果已经启动的辅助弹窗Activity不finish,单击第二条通知时刚好界面展示的就是辅助弹窗Activity,此时会触发onNewInten方法,可以使用PopupNotifyClick解析onNewInten方法的intent。其他场景,与Standard启动模式效果一致。所以使用SingleTop启动模式时,也建议及时将辅助弹窗Activity finish。

  • SingleTask:各个场景,均符合SingleTask启动模式原有效果,即:辅助弹窗Activity 未finish,单击第二条通知会显示辅助弹窗Activity并触发onNewInten方法;辅助弹窗Activity finish,单击第二条通知会重新创建辅助弹窗Activity。所以使用SingleTask启动模式时,在原有辅助弹窗Activity,增加使用PopupNotifyClick解析onNewInten方法的intent即可。

  • SingleInstance:各个场景,也是均符合SingleInstance启动模式原有效果。所以使用SingleInstance启动模式时,在原有辅助弹窗Activity,增加使用PopupNotifyClick解析onNewInten方法的intent即可。

服务端配置

服务端可以使用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,选择移动推送后选择对应的应用,在左侧导航栏选择创建消息>推送通知,在高级设置(选填)中,设置厂商通道必要参数,如下图所示。

辅助通道控制台配置
  • 本页导读 (0)
文档反馈