Как сохранить push-уведомление firebase в sqlite, когда приложение в фоновом, переднем и закрытом состоянии в Xamarin Android - PullRequest
0 голосов
/ 01 марта 2019

Я хочу сохранить push-уведомление firebase в sqlite, когда приложение в любом состоянии, например, приложение, закрыто / background / foreground.Как я могу это сделать?Возможно ли это сделать?

Ответы [ 3 ]

0 голосов
/ 01 марта 2019

В вашем FirebaseMessagingService наследующем классе у вас есть два важных метода, которые вы можете использовать для этого:

Для уведомлений переднего плана:

Этот метод вызывается, когда ваше приложение находится в состоянии переднего плана

public override void OnMessageReceived(RemoteMessage message)
    {
       // SQLite saving code here 
    }

И для уведомлений «Фоновое состояние» и «Состояние уничтожения»:

Этот метод вызывается, когда ваше приложение находится в фоновом / убитом состоянии

 public override void HandleIntent(Intent p0)
    {
       base.HandleIntent(p0);
       // SQLite saving code here 
    }

Примечание: что в некоторых случаях эта функция также вызывается в уведомлениях переднего плана, которые могут вызвать дублирование.

0 голосов
/ 27 марта 2019

вот окончательное решение этой проблемы, спасибо Mr.G.hakim

public override void OnMessageReceived(RemoteMessage message)
    {
        Log.Debug(TAG, "From: " + message.From);
        Log.Debug(TAG, "Notification Message Body: " + getBody);
        SendNotification(getBody, message.Data);
    }

    public override void HandleIntent(Intent p0)// this method will fire when the app in background and closed state
    {
        base.HandleIntent(p0);
        if (p0.Extras != null)
        {
            foreach (var key in p0.Extras.KeySet())
            {
                var value = p0.Extras.GetString(key);
                Log.Debug(TAG, "Key: {0} Value: {1}", key, value);
                if(key== "gcm.notification.title")
                {
                    Log.Debug("Delay Notification Title", "" + value);
                    getBGTitle = value;//declared local variable
                }
                else if(key== "gcm.notification.body")
                {
                    Log.Debug("Delay Notification Body", "" + value);
                    getBGBody = value;//declared local variable
        insertData(getBGTitle,getBGBody)//call method for store SQLite Insert
                }
            }
        }
}
0 голосов
/ 01 марта 2019

Когда вы получаете уведомление в методе OnMessageReceived, проверьте состояние приложения, используя этот метод

private bool isApplicationInTheBackground()
{
    bool isInBackground;

    RunningAppProcessInfo myProcess = new RunningAppProcessInfo();
    ActivityManager.GetMyMemoryState(myProcess);
    isInBackground = myProcess.Importance != Android.App.Importance.background;

    return isInBackground;
}

Если ваше приложение в состоянии background, извлеките информацию уведомления из OnMessageReceived и вставьте ее втребуемая таблица

public override void OnMessageReceived(RemoteMessage message)
{
    string orgId;
    var data = message.Data.ToDictionary(i => i.Key, i => i.Value);
    if (data.ContainsKey("organization"))
        orgId = data["organization"];


    if(isApplicationInTheBackground())
    {
        var db = GetCon();
        db.Insert(orgId); //here should be your table.
    }
}

А если вы хотите отправить / доставить сохраненные уведомления, используйте локальные push-уведомления Android .

...