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

时间:2014-10-21 15:30:56

标签: android xmpp google-cloud-messaging

我已经在android上开发了我的IM应用程序(使用xmpp& GCM),我使用的是gcm for buth UpPayload和DownPayloads .. 并通知用户他的合作伙伴是在线/在线我发送消息,我的xmpp服务器"了解" 告诉状态。

  protected void onStart() {
    super.onStart();
 if(!isOnlineSent)
 {SendOnlineStatus("Online");
    isOnlineSent=true;}
 .
 .
 .
 .}

和SendOnlineStatus看起来像:

 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);

服务器检查

的值

payload.get(ConstantsGCM.TYPECLM);  如果ONST类型服务器读取值payload.get(ConstantsGCM.STATUS_on_of); payload.get的有效值(ConstantsGCM.STATUS_on_of);是"在线"或者"离线"。

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

与我的打字状态相同,但我发送的最后一步只是活动聊天的另一面。 但是当我离线时,我会遇到像#34;用户apear在线的问题,而有些时候他会在他不在线时打字。 任何帮助或更有效的想法?

1 个答案:

答案 0 :(得分:1)

我不知道打字部分,但对于状态,也许你应该只向朋友发送类似:“你应该检查这个用户的状态”然后每个朋友的电话将直接获得真实状态服务器。希望它有所帮助