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

标签 android xmpp google-cloud-messaging

我已经完成了在 android 上开发我的 IM 应用程序(使用 xmpp 和 GCM),我正在使用 gcm 来处理 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(常量GCM.TYPECLM); 如果类型为 ONST,则服务器读取值 payload.get(ConstantsGCM.STATUS_on_of); payload.get(ConstantsGCM.STATUS_on_of) 的有效值;是“在线”或“离线”。

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

我对打字状态所做的相同,但最后一步我只发送到 Activity 聊天的另一端。 但是我遇到了诸如“用户在离线时在线,有时在他不在时却在打字”之类的问题。 任何帮助或更有效的想法?

最佳答案

我不知道打字部分,但对于状态,也许你应该只发送给 friend 这样的东西:“你应该检查这个用户的状态”然后每个 friend 的手机都会直接获得真实状态服务器。希望对你有帮助

关于android - 通过 GCM 和 xmpp 输入状态/在线状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26490553/

相关文章:

android - 如何使用 Android 读取联系人号码

android - 在 Android 中调用 Paypal 时无法获取访问 token

Android:在方向改变时交换宽度和高度

ios - iOS 中的 XMPPStreamManagement 无法发送/接收确认和节 ID

android - 通知到达时重新加载 Activity ,Android

android - 是否有可能在 Android 上为启动画面设置夜间限定符?

ios - Xmpp MultiUserChat (MUC) Group 不稳定

python - 如何将 wokkel 与 google talk : (error twisted.words.protocols.jabber.sasl.SASLNoAcceptableMechanism) 一起使用

android - 对于具有多个帐户的 Android 应用程序,GCM 注册 ID 的唯一性如何?

Android 4.x 设备接收 GCM 消息,但 Android 2.3 设备不接收