Android 通过GCM和xmpp输入状态/在线状态

Android 通过GCM和xmpp输入状态/在线状态,android,xmpp,google-cloud-messaging,Android,Xmpp,Google Cloud Messaging,我已经在android上完成了IM应用程序的开发(使用xmpp和GCM),我正在使用GCM进行buth UpPayload和DownPayloads。。 为了通知用户他的合作伙伴在线/在线,我发送消息让我的xmpp服务器“理解” 这说明了状态 protected void onStart() { super.onStart(); if(!isOnlineSent) {SendOnlineStatus("Online"); isOnlineSent=true;} . .

我已经在android上完成了IM应用程序的开发(使用xmpp和GCM),我正在使用GCM进行buth UpPayload和DownPayloads。。 为了通知用户他的合作伙伴在线/在线,我发送消息让我的xmpp服务器“理解” 这说明了状态

  protected void onStart() {
    super.onStart();
 if(!isOnlineSent)
 {SendOnlineStatus("Online");
    isOnlineSent=true;}
 .
 .
 .
 .}
SendOnline状态如下所示:

 Intent OnlineMsg = new Intent();

    OnlineMsg.putExtra("action", "com.Esmaeel.sodfarim.sodfa01.MESSAGE");
    String nowtime = String.valueOf(EsTools.getCurrentTime());
    OnlineMsg.putExtra(ConstantsGCM.TYPECLM, ConstantsGCM.ONST);
    OnlineMsg.putExtra(ConstantsGCM.STATUS_on_of, Status);
    OnlineMsg.putExtra(ConstantsGCM.TO_CLM, "-01");
    OnlineMsg.putExtra(ConstantsGCM.FROMCLM, UUID);
    OnlineMsg.putExtra(ConstantsGCM.MESSAGE_ID_CLM, regid + nowtime);
    OnlineMsg.putExtra(ConstantsGCM.NAME_CLM, "Name");


    final Bundle bndl = OnlineMsg.getExtras();
    new AsyncTask() {


        @Override
        protected String doInBackground(Object[] objects) {
            if (ggcm == null) {
                ggcm = GoogleCloudMessaging.getInstance(context);

            }

            try {
                ggcm.send(PRO_ID + ConstantsGCM.GCM_SERVER, bndl.getString(ConstantsGCM.MESSAGE_ID_CLM), bndl); //// GCM_SERVER="gcm.googleapis.com"
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "";
        }

    }.execute(null, null, null);
服务器检查

有效载荷.get(ConstantsGCM.TYPECLM); 如果类型为ONST,则服务器读取值payload.get(ConstantsGCM.STATUS_on_of); 有效载荷.get的有效值(ConstantsGCM.STATUS_on_of);是“在线”还是“离线”

然后服务器更新用户状态并将新状态发送给用户的所有好友

我输入status的方法相同,但最后一步只发送到活动聊天的另一端。 但我遇到了一些问题,比如“用户离线时在线,有时不在线时打字。”。
有什么帮助或更有效的想法吗?

我不知道打字部分,但是关于状态,也许你应该只给朋友发送一些类似的信息:“你应该检查这个用户的状态“然后,每个朋友的手机将直接在服务器上获取真实状态。希望有帮助

这不是完整的解决方案,我应该什么时候发送?每次封面打开的时候?好吧,如果他在我们谈话时离线?不:没有直接的方法知道应用程序是否可见,它很复杂。不,你在事件发生时(用户状态发生变化)发送消息,但在朋友收到消息和他们打开对话时(或在必要时)发送消息,他们检查并显示状态。主要问题是:情况:您无法知道事件何时发生(脱机)。。用户可能会按home按钮,因此他可能会退出对话,但您无法知道(作为开发人员,您不能每次在Pause呼叫时发送脱机消息,他可能会转到另一个活动或按home)-当您给我一个部分解决方案时,我将给您(V)>>您可以知道用户何时按主页按钮:只需在中发送状态更新:onPause方法:当您离开活动时会调用此方法(通过按pause,或通过启动新活动以确保它符合您的需要),我无法(或不希望)在用户每次浏览我的应用程序时发送脱机消息,他可以离开coversation,但仍在应用程序中。在这种情况下,我不想发送脱机>>>,因此按home或Back至我的应用程序主屏幕将调用onPause。。android控制[主页]按钮,因此不会告诉应用程序是否按下。