Уведомления в андроиде через .net webservice - PullRequest
0 голосов
/ 05 апреля 2019

Мой код работает отлично, но проблема в перенаправлении, например, когда на моем телефоне появляется одно уведомление, он получает идентификатор еды 101, а через несколько секунд или минут, когда я получаю второе уведомление, я получаю код еды 102. Когда я нажимаюв первом уведомлении отображается информация с идентификатором еды 102 вместо идентификатора еды 101 Пожалуйста, помогите мне, где я делаю не так

Вот мой код C #

 public String SendNotification(string DeviceToken, string title, string msg, int id, string action)
        {
            var result = "-1";
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Headers.Add(string.Format("Authorization: key={0}", serverKey));
            httpWebRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
            httpWebRequest.Method = "POST";

            var payload = new
            {
                to = DeviceToken,
                priority = "high",
                content_available = true,
                data = new
                {

                    body = msg,
                    title = title,
                    click_action = action

                },
            };
            var serializer = new JavaScriptSerializer();
            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = serializer.Serialize(payload);
                streamWriter.Write(json);
                streamWriter.Flush();
            }

            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                result = streamReader.ReadToEnd();
            }

            return result;
        }

Вот мой экземпляр FirebaseКласс

public class MyFirebaseInstanceService extends FirebaseMessagingService {

    PendingIntent pendingIntent;

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        String action_click = remoteMessage.getData().get("click_action");
        String userid = remoteMessage.getData().get("key");
        String body =remoteMessage.getData().get("body");
        String foodid = remoteMessage.getData().get("keyfood");


        Intent intent = new Intent(this,MainActivity.class);
        intent.putExtra("click_action",action_click);
        intent.putExtra("key",userid);
        intent.putExtra("body",body);
        intent.putExtra("keyfood",foodid);
        intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TOP);
        pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        ShowNotification(remoteMessage.getData().get("title"), remoteMessage.getData().get("body"));

    }

    private void ShowNotification(String title, String body) {

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        String NOTIFICATION_CHANNEL_ID = "com.example.acer.chefodine.test";

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID
                    , "Notification", NotificationManager.IMPORTANCE_DEFAULT);
            notificationChannel.setDescription("ChefODine");
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.BLUE);
            notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
            notificationManager.createNotificationChannel(notificationChannel);
        }
        NotificationCompat.Builder notifiBuilder = new NotificationCompat.Builder
                (this, NOTIFICATION_CHANNEL_ID);

        notifiBuilder.setAutoCancel(true).
                setDefaults(Notification.DEFAULT_ALL).setContentIntent(pendingIntent)
                .setWhen(System.currentTimeMillis()).setSmallIcon(R.drawable.logo)
                .setContentTitle(title).setContentText(body).setContentInfo("info");
        notificationManager.notify(new Random().nextInt(), notifiBuilder.build());

    }

Вот мой основной вид деятельности

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    notificationWork();
}


private void notificationWork(){

    String action = getIntent().getStringExtra("click_action");
    String key = getIntent().getStringExtra("key");
    String body = getIntent().getStringExtra("body");
    String foodid = getIntent().getStringExtra("keyfood");

    if(action !=null && !action.equals("")){
        NotificationIntent noti = new NotificationIntent();
        noti.redirectIntent(this,action,key,foodid,body,this);

    }

}

Вот мой класс уведомлений

private MainActivity mainactivity;
 public void redirectIntent(MainActivity mainactivity, String  action, final String key, final String foodid, String body, MainActivity context) {
        this.mainactivity=mainactivity;
        switch (action){
            case "notification":
                context.replaceFragment(new Notifications());
                break;
            case  "popup":

                break;

            case "foodaction":
               final int id = Integer.parseInt(foodid);
                GetFoodById(id);
                break;
            case "order":
                context.replaceFragment(new ChefOrders());
                break;
        } }
...