我正在使用OneSignal网站发出应用程序通知,当我单击在Web浏览器而不是应用程序中打开的通知时。但是我想在应用程序上打开所有通知。
注意:“我的应用”正在Web视图上运行。
请帮助我了解有关该应用的通知。
我的主要活动代码:
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
public class MainActivity extends AppCompatActivity {
MyApplication myApplication;
private static int SPLASH_TIME_OUT = 3000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
setContentView(R.layout.activity_main);
myApplication = MyApplication.getInstance();
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
Intent homeIntent = new Intent(MainActivity.this, HomeActivity.class);
startActivity(homeIntent);
finish();
}
},SPLASH_TIME_OUT);
}
}
My Application Code:
import android.app.Application;
import com.onesignal.OneSignal;
public class MyApplication extends Application {
private static MyApplication mInstance;
public MyApplication() {
mInstance = this;
}
@Override
public void onCreate() {
super.onCreate();
mInstance = this;
// OneSignal Initialization
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
}
public static synchronized MyApplication getInstance() {
return mInstance;
}
}
答案 0 :(得分:0)
我对这个信号库版本感到厌倦,并且效果很好
将其放置在build.gradle(app)文件中
//One Signal
implementation 'com.onesignal:OneSignal:[3.9.1, 3.99.99]'
现在创建这样的Application类
public class SampleApplication extends Application {
private static SampleApplication sInstance;
private static Context context;
public static SampleApplication getInstance() {
return sInstance;
}
@Override
public void onCreate() {
super.onCreate();
sInstance = this;
context = getApplicationContext();
MultiDex.install(context);
// OneSignal Initialization
OneSignal.startInit(this)
.setNotificationOpenedHandler(new MyNotificationOpenedHandler(this))
.init();
}
public static SampleApplication getAppContext() {
return (SampleApplication) context;
}}
现在此 SampleApplication 在清单文件中
<application
android:name=".SampleApplication"
...
...
<meta-data
android:name="com.onesignal.NotificationOpened.DEFAULT"
android:value="DISABLE" />
</application>
这是我的通知处理程序类
public class MyNotificationOpenedHandler implements OneSignal.NotificationOpenedHandler, AppConstants {
private Application application;
public MyNotificationOpenedHandler(Application application) {
this.application = application;
}
@Override
public void notificationOpened(OSNotificationOpenResult result) {
String launchUrl = result.notification.payload.launchURL;
if (TextUtils.isEmpty(launchUrl)) {
startAppWithLaunchScreen();
} else {
startAppWithHomeScreen(launchUrl);
}
}
private void startAppWithLaunchScreen() {
Intent intent = new Intent(application, SplashScreenActivity.class).setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
application.startActivity(intent);
}
private void startAppWithHomeScreen(String launchURL) {
Intent intent = new Intent(application, WebViewActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(ONE_SIGNAL_LAUNCH_URL, launchURL);
application.startActivity(intent);
}}
答案 1 :(得分:0)
据我了解,您想直接在应用中处理一个信号通知。
这是我长时间使用以执行相同代码的代码:
try {
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.setNotificationOpenedHandler(new MyNotificationOpenedHandler()) //Handle notification Opened
.setNotificationReceivedHandler(new MyNotificationReceivedHandler())
.init();
NotificationUtils
.sendTag(MyNotificationOpenedHandler.APP_VERSION, BuildConfig.VERSION_NAME);
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
notificationId = userId;
Log.v("notificationId", "notificationId is " + notificationId);
OneSignal.setSubscription(pref.getDataBoolean(PREF_IS_NOTIFICATIONS_ENABLED, true));
}
});
} catch (Exception e) {
e.printStackTrace();
Crashlytics.logException(e);
}
MyNotificationOpenedHandler,当用户单击可编写逻辑的通知时,将调用覆盖下面的方法implements OneSignal.NotificationOpenedHandler
的{{1}}。
这是示例逻辑:
public void notificationOpened(OSNotificationOpenResult result) {}
希望这会有所帮助,如果您有任何疑问,请告诉我。
答案 2 :(得分:0)
我试图在我的应用程序中添加一个深层链接,并且可以正常工作。 深层链接可用于通知以及所有类型的链接。 这是最好的方法。