打开 OneSignal URL 到另一个 activity 的 WebView

Open OneSignal URL to WebView of another activity

使用 OneSignal Notification,我正在发送包含 URL 的通知。在我的 ADDITIONAL DATA 部分,我发送 KEY: openURLVALUE: http://example.com.

我正在尝试打开 DailyDose activity 的 WebView 内的 link。

这里,我的 ProfileActivity activity,我正在尝试接收通知并将其发送至 DailyDose activity。

public class ProfileActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);

        OneSignal.startInit(this)
            .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
            .setNotificationOpenedHandler(new NotificationOpenHandler())
            .unsubscribeWhenNotificationsAreDisabled(true)
            .init();
    }

    class NotificationOpenHandler implements OneSignal.NotificationOpenedHandler {
        @Override
        public void notificationOpened(OSNotificationOpenResult result) {
            OSNotificationAction.ActionType actionType = result.action.type;
            JSONObject data = result.notification.payload.additionalData;
            String openURL = getIntent().getStringExtra("openURL");
            Intent intent = new Intent(getApplicationContext(), DailyDose.class);
            intent.putExtra("openURL", openURL);
            startActivity(intent);
        }
    }
}

这是我的 DailyDose activity,我试图在 WebView 中打开 link:

public class DailyDose extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_daily_dose);

            String openURL = getIntent().getStringExtra("openURL");

            final TextView textView = findViewById(R.id.debug_view);
            textView.setText("URL from additionalData: " + openURL);

            WebView webView = findViewById(R.id.webview);
            webView.getSettings().setJavaScriptEnabled(true);
            webView.setWebViewClient(new WebViewClient());
            if (openURL == null)
                webView.loadUrl("https://google.com");
            else
                webView.loadUrl(openURL);

但它不起作用。点击通知,它只会打开应用程序的 ProfileActivity activity。不做任何其他事情。我究竟做错了什么?我一直在寻找解决方案一段时间,但找不到任何有效的方法。非常感谢您的建议。

当您单击通知时,它会打开 ProfileActivity,因为这是 onesignal 的默认行为。它将打开具有 onesignal 初始化的相同 activity。因此,首先您需要禁用 onesignal 的这种默认行为。在您的 AndroidManifest 文件中写入以下行。

<application>
   <meta-data android:name="com.onesignal.NotificationOpened.DEFAULT"  android:value="DISABLE" />
</application>

现在 运行 您的项目并检查它是否会打开 DailyDose activity。如果您仍然遇到任何问题,请告诉我。

有关此的更多说明,请阅读 onesignal 的官方文档:

https://documentation.onesignal.com/docs/android-customizations#section-background-data-and-notification-overriding(在页面中搜索:"Changing the open action of a notification")。