Android:正确处理推送通知

Android:正确处理推送通知,android,notifications,push-notification,google-cloud-messaging,Android,Notifications,Push Notification,Google Cloud Messaging,我正在将一个应用程序从iOS移植到Android。我们使用Parse作为后端。我目前正在研究推送通知的实现 一切进展顺利,因为我能够在Android应用程序中接收推送通知。现在,我想对应用程序进行编码,使其根据应用程序的当前状态正确运行 通过谷歌搜索/阅读,我认为以下是正确的: 如果用户已强制关闭你的应用,你的应用将永远不会再次运行代码,除非用户重新启动。如果应用程序崩溃,这也是真的吗 否则,应用程序将收到通知 我想知道的是什么时候该采取什么行动。例如,在我的iOS应用程序中,以下情况会导致相关

我正在将一个应用程序从iOS移植到Android。我们使用Parse作为后端。我目前正在研究推送通知的实现

一切进展顺利,因为我能够在Android应用程序中接收推送通知。现在,我想对应用程序进行编码,使其根据应用程序的当前状态正确运行

通过谷歌搜索/阅读,我认为以下是正确的:

  • 如果用户已强制关闭你的应用,你的应用将永远不会再次运行代码,除非用户重新启动。如果应用程序崩溃,这也是真的吗
  • 否则,应用程序将收到通知
  • 我想知道的是什么时候该采取什么行动。例如,在我的iOS应用程序中,以下情况会导致相关操作:

  • 如果应用程序是从用户“点击”推送通知启动的,我会直接进入屏幕查看相关内容。我不会询问用户是否想要查看内容,但我假设单击推送通知表示这一愿望
  • 如果在收到推送通知时应用程序已在运行,我将执行以下逻辑:
    • 如果与推送通知相关的内容已经在屏幕上,我只需放弃该通知
    • 如果内容在屏幕上是而不是,我会向用户显示一个弹出窗口,询问他们是否希望查看内容。只有当他们单击“是”时,我才会向他们显示内容。这通常涉及UI导航
  • 所以,我想知道我是如何像在iOS中一样确定Android的用户交互的,具体来说:

  • 我如何知道用户是否点击推送通知来启动应用程序(无论它是否已经运行)
  • 当收到推送通知时,我如何知道我的应用程序是否已在屏幕上
  • 我看到了,但是关于GCM/PUSH如何工作的答案似乎更高层次,我已经理解了

    我看到了,但答案的作者没有提到他们如何检查应用程序的状态。我想那一点的如何才是我真正想要的

    我读了,但是我没有找到一种方法来确定代表这个应用程序的流程的重要性级别(我说的对吗?)

    这可能是确定流程重要性级别的一种方法,但它让我想知道是否有任何“陷阱”或我需要知道的进一步细节,例如给定的重要性是否始终表示特定的应用程序生命周期状态

    我能找到的最好的信息是,这是一个非常基本的推送接收器,我已经有工作了

    下面是扩展
    ParsePushBroadcastReceiver
    的框架实现:

    public class ParsePushNotificationReceiver extends ParsePushBroadcastReceiver {
        private final String TAG = "ParsePushBroadcastReceiver";
    
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.d(TAG, "onReceive() fired.");
            Log.d(TAG, "intent: " + intent.toString());
            Log.d(TAG, "extras: " + intent.getExtras().toString());
            super.onReceive(context, intent);
        }
    
        @Override
        protected void onPushReceive(Context context, Intent intent) {
            Log.d(TAG, "onPushReceive() fired.");
            Log.d(TAG, "intent: " + intent.toString());
            Log.d(TAG, "extras: " + intent.getExtras().toString());
            super.onPushReceive(context, intent);
        }
    
        @Override
        protected void onPushDismiss(Context context, Intent intent) {
            Log.d(TAG, "onPushDismiss() fired.");
            super.onPushDismiss(context, intent);
        }
    
        @Override
        protected void onPushOpen(Context context, Intent intent) {
            Log.d(TAG, "onPushOpen() fired.");
            super.onPushOpen(context, intent);
        }
    
        @Override
        protected Class<? extends Activity> getActivity(Context context, Intent intent) {
            Log.d(TAG, "getActivity() fired.");
            return super.getActivity(context, intent);
        }
    
        @Override
        protected int getSmallIconId(Context context, Intent intent) {
            Log.d(TAG, "getSmallIconId() fired.");
            return super.getSmallIconId(context, intent);
        }
    
        @Override
        protected Bitmap getLargeIcon(Context context, Intent intent) {
            Log.d(TAG, "getLargeIcon() fired.");
            return super.getLargeIcon(context, intent);
        }
    
        @Override
        protected Notification getNotification(Context context, Intent intent) {
            return super.getNotification(context, intent);
        }
    }
    
    公共类ParsePushNotificationReceiver扩展了ParsePushBroadcastReceiver{
    私有最终字符串标记=“ParsePushBroadcastReceiver”;
    @凌驾
    公共void onReceive(上下文、意图){
    d(标记“onReceive()fired”);
    Log.d(标记“intent:+intent.toString());
    Log.d(标记“extras:+intent.getExtras().toString());
    super.onReceive(上下文、意图);
    }
    @凌驾
    受保护的void onPushReceive(上下文、意图){
    d(标记“onPushReceive()已激发”);
    Log.d(标记“intent:+intent.toString());
    Log.d(标记“extras:+intent.getExtras().toString());
    super.onPushReceive(上下文、意图);
    }
    @凌驾
    受保护的void onpushdisclose(上下文、意图){
    Log.d(标记“onpushdismise()fired”);
    super.onpushdismise(上下文、意图);
    }
    @凌驾
    受保护的void onPushOpen(上下文、意图){
    d(标记“onPushOpen()已激发”);
    super.onPushOpen(上下文、意图);
    }
    @凌驾
    
    保护类嗨,你找到解决办法了吗?我也陷入了你在问题中提到的一些问题