打开 OneSignal URL 到另一个 activity 的 WebView
Open OneSignal URL to WebView of another activity
使用 OneSignal Notification,我正在发送包含 URL 的通知。在我的 ADDITIONAL DATA
部分,我发送 KEY: openURL
和 VALUE: 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")。
使用 OneSignal Notification,我正在发送包含 URL 的通知。在我的 ADDITIONAL DATA
部分,我发送 KEY: openURL
和 VALUE: 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")。