通过 GCM 和 xmpp 输入状态/在线状态
Posted
技术标签:
【中文标题】通过 GCM 和 xmpp 输入状态/在线状态【英文标题】:typing status / online status via GCM and xmpp 【发布时间】:2014-10-21 15:30:55 【问题描述】:我已经在 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(ConstantsGCM.TYPECLM); 如果类型 ONST 服务器读取值 payload.get(ConstantsGCM.STATUS_on_of); payload.get(ConstantsGCM.STATUS_on_of) 的有效值;是“在线”或“离线”。
然后服务器更新用户状态并将新状态发送给用户的所有朋友。
与打字状态相同,但最后一步我只发送到活动聊天的另一端。 但是我遇到了诸如“用户在离线时出现在线,有时在他不在时出现打字”之类的问题。 有什么帮助或更有效的想法吗?
【问题讨论】:
【参考方案1】:我不知道打字部分,但对于状态,也许你应该只发送给朋友这样的东西:“你应该检查这个用户的状态”然后每个朋友的电话都会直接得到真实的状态服务器。希望对你有帮助
【讨论】:
这不是完整的解决方案,我应该什么时候发送?每次打开封面?好的,如果他在我们谈话时离线? NOT:没有直接的方法可以知道应用程序是否可见,它很复杂。 不,您在事件发生时发送消息(用户状态更改),但是当朋友收到消息并打开对话时(或在必要时),他们会检查状态并显示它。 这里是主要问题:案例:您无法知道事件何时发生(离线).. 用户可能会按下主页按钮,因此如果他退出对话,但您无法知道(如开发人员,您不能每次在 onPause 调用时离线发送,他可能会导航到另一个活动或按 home )-当您给我一个部分解决方案时,我会给您(V)>> 您可以知道用户何时按下主页按钮:只需发送您的状态更新:onPause 方法:当您离开活动时调用此方法(通过按暂停,或通过启动新活动,所以确保它符合您的需求) 每次用户在我的应用程序中导航时,我都不能(或不想)发送离线消息,他可以离开封面,但在这种情况下仍然在应用程序中我不想离线发送>>> 所以按下我的应用程序的主屏幕或返回主屏幕将调用 onPause.. 并且 android 控制 [home] 按钮,因此不会告诉应用程序是否按下。以上是关于通过 GCM 和 xmpp 输入状态/在线状态的主要内容,如果未能解决你的问题,请参考以下文章
从 Android 以编程方式更改 Google Talk 在线状态