辅助弹窗接入
本章节介绍接入厂商通道后如何使用辅助弹窗。
概述
接入推送功能的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
和单击通知指定启动Activity
的Intent
,解析完成后,会在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的推送高级接口提供了
AndroidPopupActivity
、AndroidPopupTitle
和AndroidPopupBody
三个参数,分别用于设置辅助弹窗通知打开时跳转的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,选择移动推送后选择对应的应用,在左侧导航栏选择创建消息>推送通知,在高级设置(选填)中,设置厂商通道必要参数,如下图所示。
