如何在应用程序而不是浏览器中打开通知

时间:2019-12-17 05:35:50

标签: android webview

我正在使用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;
    }
}

3 个答案:

答案 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)

我试图在我的应用程序中添加一个深层链接,并且可以正常工作。 深层链接可用于通知以及所有类型的链接。 这是最好的方法。

相关问题