Почему в ожидании намерения потерять мои дополнения (Firebase Notification)? - PullRequest
0 голосов
/ 14 ноября 2018

Прежде чем я покажу вам фрагмент кода, я хочу сказать, что он работает, когда приложение находится на переднем плане.Я сразу попытался запустить действие, когда уведомление получено, и оно работает отлично, но ожидающее намерение теряет лишнее намерение, и я не могу получить данные в Загрузка активности.Чтобы быть понятным, уведомление не будет отображаться во время работы приложения, поэтому всякий раз, когда пользователь нажимает на приложение уведомления, оно будет отображаться в фоновом режиме.

Получатель уведомлений:

    private void SendNotification(Firebase.Messaging.RemoteMessage message)
    {
        var intent = new Intent(this, typeof(LoadingActivity));
        if (message.Data.TryGetValue("Page", out string value))
        {
            Menu page = (Menu)int.Parse(value);
            switch (page)
            {
                case Menu.Sales:
                    {
                        if (message.Data.TryGetValue("DetailId", out string SaleId))
                            intent.PutExtra("SaleId", SaleId);
                        break;
                    }
                case Menu.Recipes:
                    {
                        if (message.Data.TryGetValue("DetailId", out string RecipeId))
                            intent.PutExtra("RecipeId", RecipeId);
                        break;
                    }
                case Menu.News:
                    {
                        if (message.Data.TryGetValue("DetailId", out string NewsId))
                            intent.PutExtra("NewsId", NewsId);
                        break;
                    }
                case Menu.ExclusiveProducts:
                    {
                        if (message.Data.TryGetValue("DetailId", out string SpecialProductid))
                            intent.PutExtra("SpecialProductid", SpecialProductid);
                        break;
                    }
                case Menu.CookingAdvices:
                    {
                        if (message.Data.TryGetValue("DetailId", out string CookingAdviceId))
                            intent.PutExtra("CookingAdviceId", CookingAdviceId);
                        break;
                    }
            }
        }
        intent.AddFlags(ActivityFlags.ClearTop);
        int uniqueInt = (int)((DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond) & 0xfffffff);
        var pendingIntent = PendingIntent.GetActivity(this, uniqueInt, intent, PendingIntentFlags.OneShot);
        var defaultSoundUri = RingtoneManager.GetDefaultUri(RingtoneType.Notification);
        var notificationBuilder = new NotificationCompat.Builder(this)
                                                        .SetContentTitle(message.GetNotification().Title)
            .SetContentText(message.GetNotification().Body)
            .SetAutoCancel(true)
            .SetSmallIcon(Resource.Drawable.ic_launcher)
            .SetSound(defaultSoundUri)
            .SetContentIntent(pendingIntent);
        var notificationManager = (NotificationManager)GetSystemService(Service.NotificationService);
        notificationManager.Notify(0, notificationBuilder.Build());
    }

, и вот моя операция загрузки OnCreate когдая пытаюсь получить доступ к дополнительным намерениям

    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        TransferInstances.Instance.ScreenHeight = this.Resources.DisplayMetrics.HeightPixels;
        TransferInstances.Instance.ScreenWidth = this.Resources.DisplayMetrics.WidthPixels;
        if (FirstLaunch)
        {
            try
            {
                AppCore.RegisterServices(GetLocalFilePath("x.db3"), new AlertDialogService(), null, new DeviceIdService());
                CachedImageRenderer.Init(true);
                CarouselView.FormsPlugin.Android.CarouselViewRenderer.Init();
                FFImageLoading.ImageService.Instance.Initialize();
                Forms.Init(this, savedInstanceState);
                GetStartedBtn.Click += GetStartedBtn_Click;
                FBase.Instance.InitFirebase(this);
                FBase.Instance.InitGoogleSignIn(this);
                CreateNotificationChannel();
                FirstLaunch = false;
            }catch(Exception){}
        }
        Intent m_intent = new Intent(this, typeof(MainActivity));
        bool notificationReceived = false;
        if (int.TryParse(Intent.GetStringExtra("CookingAdviceId"), out int CookingAdviceId))
        {
            notificationReceived = true;
            m_intent.PutExtra("CookingAdviceId", CookingAdviceId);
        }
        else if (int.TryParse(Intent.GetStringExtra("NewsId"), out int NewsId))
        {
            notificationReceived = true;
            m_intent.PutExtra("NewsId", NewsId);
        }
        else if (int.TryParse(Intent.GetStringExtra("SaleId"), out int SaleId))
        {
            notificationReceived = true;
            m_intent.PutExtra("SaleId", SaleId);
        }
        else if (int.TryParse(Intent.GetStringExtra("RecipeId"), out int RecipeId))
        {
            notificationReceived = true;
            m_intent.PutExtra("RecipeId", RecipeId);
        }
        else if (int.TryParse(Intent.GetStringExtra("SpecialProductid"), out int SpecialProductid))
        {
            notificationReceived = true;
            m_intent.PutExtra("SpecialProductid", SpecialProductid);
        }
        if (notificationReceived)
        {
            m_intent.AddFlags(ActivityFlags.NoAnimation);
            m_intent.AddFlags(ActivityFlags.ClearTop);
            StartActivity(m_intent);
        }
    }
...