安卓12,如何替换通知跳板?

5

拥有拦截推送通知的Android SDK,并使用通知“跳板”进一步打开终端活动。在深度链接的情况下,使用此SDK的应用程序将打开配置的深度链接处理程序活动。

trampoline的片段:

public class NotificationTrampolineReceiver extends BroadcastReceiver {
@Override
    public void onReceive(final Context context, final Intent intent) {
        final PendingResult asyncResult = goAsync();
        ExecutorService executor = Executors.newSingleThreadExecutor();
        asycTask(executor, new Runnable() {
            @Override
            public void run() {
                String urlStr = getStringExtra(intent, PUSH_URL);
                if (urlStr != null) {
                    var intent2: Intent = Intent(Intent.ACTION_VIEW, Uri.parse(urlStr));
                    if (intent2 != null) {
                        intent2.addFlags(FLAG_ACTIVITY_NEW_TASK);
                        intent2.addFlags(FLAG_ACTIVITY_BROUGHT_TO_FRONT);
                        context.startActivity(intent2);
                        logAnalytics(intent, Message.MessageAction.OPEN);                   
                     }
                }
                asyncResult.finish();
            }
        });
    }

    void asycTask(ExecutorService executor, final Runnable task) {
        try {
            executor.execute(task);
        } catch (Throwable ex) {}
    }
}
Android 12不再支持使用notification trampolines。在SDK中,通知跳板用于拦截点击并执行诸如记录分析事件、在点击通知上的Action按钮时关闭通知抽屉等操作。但是该SDK并不知道应用程序可能配置以处理深链接的活动。

使用虚拟活动来替换trampoline是可行的,但感觉不太对,即打开一个活动,然后在其中打开另一个活动,然后结束此活动。

当Android 12限制notification tramoline时,是否提供了类似这里的用例的替代方案?目前还没有找到。

拦截推送通知的点击并首先打开活动的建议新解决方案是什么?

1个回答

14

在IT技术中,如果你要启动一个Activity,最好直接从Notification中启动。然后,Activity可以执行分析并找出需要启动哪个Activity,然后委托给那个Activity启动。另一种方法是,启动的Activity可以发送广播Intent到你的BroadcastReceiver中进行处理。

注意:如果你直接从Notification中启动一个Activity,那就不是跳板(trampoline)了。跳板是指你直接从Notification中启动一个ServiceBroadcastReceiver,然后该组件再启动一个Activity。这样做的想法是让用户控制屏幕上弹出的内容。如果他点击了通知,他期望屏幕上会出现某些内容,如果你的Service启动了一个Activity,那么它可能会随时打断他。


你好,我无法在MainActivity的onNewIntent()方法中接收数据负载。我需要捕获该数据并传递给Web服务器。 - vmvyas1989
@VasudevM.Vyas,您应该开一个新的问题来询问。在这里作为评论提出问题不足以引起足够的关注。 - David Wasser
嗨@DavidWasser,我的情况是我想打开GoogleMap并想要跟踪通知打开事件。我尝试了一个hack来调用一个透明的活动。在那里,我添加了一个代码来跟踪通知打开事件,然后调用了GoogleMap。但问题是:当我的应用程序在后台时,场景才能正常工作,但当我将其从后台中删除时,我会收到“间接通知活动启动(蹦床)”错误。 - Kavita Patil
@KavitaPatil 能否请您为此开一个新问题? 当您说“当我将其从背景中移除时,我会遇到一个...错误”,我也不明白您的意思。 请开一个新问题,详细说明此错误,并且我很高兴帮您查看。 - David Wasser
1
@DavidWasser非常感谢你的帮助 - 我希望IDE能够提供一些提示,我在logcat中找不到任何信息,也没有看到任何异常 - 我只是发现通知操作按钮无法正常工作并关闭了通知。我将我的操作点击逻辑从接收器类移动到构建通知的类中,最终成功打开了活动页面 :D - Michael Harper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接