0
votes

Comment ouvrir la notification dans l'application et non dans le navigateur

J'effectue la notification de l'application en utilisant le site Web OneSignal et lorsque je clique sur la notification qui s'ouvre dans le navigateur Web, pas dans l'application. Mais je souhaite ouvrir toutes les notifications sur l'application.

Remarque: Mon application fonctionne sur la vue Web.

Veuillez m'aider avec les notifications de l'application.

Mon code d'activité principale:

  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;
    }
}


1 commentaires

Veuillez poster votre code pour notification


3 Réponses :


0
votes

Je suis fatigué de cette version de la bibliothèque de signaux et cela a bien fonctionné

Placez-le dans le fichier build.gradle (app)

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);
}}

Maintenant, créez une classe Application comme celle-ci

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

Maintenant, cette SampleApplication dans le fichier manifeste

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;
}}

Voici ma classe de gestionnaire de notifications

//One Signal
implementation 'com.onesignal:OneSignal:[3.9.1, 3.99.99]'


1 commentaires

qu'est-ce que vous obtenez dans logcat?



0
votes

D'après ce que j'ai compris, vous vouliez gérer directement la notification de signal unique dans l'application.

Voici le code que j'ai utilisé il y a longtemps pour effectuer la même chose:

@Override

  public void notificationOpened(OSNotificationOpenResult result) {
    try {

      //To launch homepage if in case of no launchUrl. - IOS Limitation - cannot support http from panel.
      if (result.notification.payload.launchURL == null) {
        result.notification.payload.launchURL = "";
      }

      if (result.notification.payload.launchURL != null) {
        if (result.notification.payload.launchURL.startsWith("market://")) {
          String marketUrl = result.notification.payload.launchURL;
          AndroidUtils.openMarketLinkPage(context, marketUrl);
        } else {

          //Failsafe. Supports both http:// and without it.
          result.notification.payload.launchURL =
              "http://" + DeepLinkUtils.stripUrlSchema(result.notification.payload.launchURL);

          if (result.notification.isAppInFocus) {
            Intent mainIntent = NavigationUtilsKt.getHomeIntent(AppController.getInstance());
            mainIntent.putExtra(AppConstants.EXTRA_DEEPLINK_DATA, DeepLinkUtils
                .packDeepLinkData(NotificationUtils.NOTIFICATION,
                    Uri.parse(result.notification.payload.launchURL),
                    result.notification.androidNotificationId));
            mainIntent
                .setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_NEW_TASK);
            AppController.getInstance().startActivity(mainIntent);
          } else {
            Intent mainIntent = new Intent(AppController.getInstance().getApplicationContext(),
                SplashActivity.class);
            mainIntent
                .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
            mainIntent.putExtras(NotificationUtils.prepareNotificationBundle(result.notification.androidNotificationId));
            mainIntent.setData(Uri.parse(result.notification.payload.launchURL));
            AppController.getInstance().startActivity(mainIntent);

          }
        }
      }
      if (result.notification.payload.additionalData != null) {
        JSONObject campaignData = result.notification.payload.additionalData;
        if (campaignData.has(CAMPAIGN_URI)) {
          GtmUtils.gtmPushNotificationClick(GTM_SCREEN_NAME_NOTIFICATION,
              campaignData.getString(CAMPAIGN_URI),
              campaignData.has(CAMPAIGN_EVENTS) ? campaignData.getString(CAMPAIGN_EVENTS) : null);
        }
      }

    } catch (JSONException e) {
      e.printStackTrace();
    }

  }

MyNotificationOpenedHandler qui implémente OneSignal.NotificationOpenedHandler qui remplace la méthode ci-dessous public void notificationOpened (OSNotificationOpenResult result) {} sera appelée lorsque l'utilisateur clique sur la notification où vous pouvez écrivez votre logique.

Voici l'exemple de logique:

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);
    }

J'espère que cela vous aidera, s'il vous plaît laissez-moi savoir si vous avez des questions.


3 commentaires

Pourriez-vous s'il vous plaît m'aider avec comment mettre ces codes et où ..?


Le premier est sous votre classe Application (la classe qui étend Application que vous auriez pu mentionner dans le manifeste xml comme android.name). Et le second est une nouvelle classe MyNotificationHandler qui implémente OneSignal.


Je ne comprends pas MyNotificationReceivedHandler () ..?



0
votes

J'ai essayé d'ajouter un lien profond dans mon application et c'est du travail. Des liens profonds fonctionnent pour notification et tous types de liens. C'est la meilleure façon de le faire.


0 commentaires