====== GCM、华为推送 ======
----
===== Google GCM集成 =====
==== 必备条件 ====
* GCM 使用针对于国外用户;
* GCM 要求设备安装有 Google Play 服务和 Google Play 商店。
==== 设置环信 Android 推送证书 ====
第 1 步:登录 [[https://console.developers.google.com/project|Google 开发平台]],Create a project…,创建你的应用名称,应用 ID(ID 系统会随机为你分配一个唯一的值,也可以手动填写)。
{{:start:200androidcleintintegration:gcm1.jpg?nolink|创建应用}}
第 2 步:创建成功得到一个对应的project number。
{{:start:200androidcleintintegration:gcm2.jpg?nolink|获得project number}}
第 3 步:点击左侧 Credentials — create service key,得到 API key。
{{:start:200androidcleintintegration:gcm3.jpg?nolink|获得API key}}
==== 在环信管理后台配置证书 ====
登录[[http://console.easemob.com|环信管理后台]],选择你的应用,选择推送证书 -> 新增证书,证书的名称要求填写从 Google 后台创建项目生成的 project number,证书秘钥为创建 server key 生成的 API key。
{{:start:200androidcleintintegration:gcm4.jpg?nolink|在环信管理后台配置证书}}
==== Android 客户端代码配置 ====
==== AndroidManifest.xml 配置 ====
==== 代码设置 ====
* project number(Google 开发平台创建项目生成的)需要在登录之前设置 ''EMChatManager.getInstance().setGCMProjectNumber(projectNumber);''。
* 使用 GCM 则需要使用新的 logout API,logout 里面参数默认为 true 是需要清除 GCM token,而且要求退出时清除。
EMChatManager.getInstance().logout(true);
EMChatManager.getInstance().logout(true,callback);
如果是被踢的情况下,则要求设置为 false。
===== 华为推送集成 =====
注意:华为EMUI4.0 需要把app 自动启动权限打开才能收到推送。
==== 需求 ====
为了在华为设备上当app被kill后还能继续收到消息
==== 设置华为推送证书 ====
进入[http://developer.huawei.com/cn/consumer/devunion/openPlatform/html/memberCenter.html#appManage#|华为开发者后台]],创建一个应用,完成后配置push权益。创建完成后,会自动生成的APP ID及APP SECRET,进入[[http://console.easemob.com|环信管理后台]],选择你的应用—>选择推送证书—>Huawei—>新增证书。
证书名称为刚从华为后台拿到的 APP ID,证书密钥为 APP SECRET,点击上传即可。
==== 客户端配置 ====
华为推送所需要的jar包已经放到easeui的libs目录下:HwPush_SDK_V2705_nomap.jar,因为demo用到了百度地图,和华为push的地图模块冲突(两者都是用的百度地图),这里的push jar包移除了map模块,需要的开发者可以去华为后台自行下载
在 AndroidManifest.xml 中配置权限及相应 service 声明等。
**注意:**把 Demo 的包名 ''com.easemob.chatuidemo'' 替换成你自己项目的。
...
...
/>
...
==== 代码设置 ====
在初始化 SDK 时调用''EMChatManager.getInstance().setHuaweiPushAppId(huaweiPushAppid,)''。
以及 logout 时调用''EMChatManager.getInstance().logout(true,callback)''。
===== 推送的配置选项 =====
用户可以在消息扩展中增加特定的字段来实现消息的推送配置。
==== 发送静默消息(不推送)====
([[start:200androidcleintintegration:50singlechat#发送消息|Android 发消息]])
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
TextMessageBody txtBody = new TextMessageBody("test");
message.setReceipt("6006");
// 设置自定义扩展字段
message.setAttribute("em_ignore_notification", true);
// 发送消息
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){...});
====强制推送====
([[start:200androidcleintintegration:50singlechat#发送消息|Android 发消息]])
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
TextMessageBody txtBody = new TextMessageBody("test");
message.setReceipt("6006");
// 设置自定义扩展字段
message.setAttribute("em_force_notification", true);
// 发送消息
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){...});
====自定义推送提示====
([[start:200androidcleintintegration:50singlechat#发送消息|Android 发消息]])
EMMessage message = EMMessage.createSendMessage(EMMessage.Type.TXT);
TextMessageBody txtBody = new TextMessageBody("test");
message.setReceipt("6006");
// 设置自定义扩展字段
try{
JSONObject extJson = new JSONObject();
extJson.put("em_push_name", "自定义标题");
extJson.put("em_push_content", "自定义信息");
message.setAttribute("em_apns_ext",extJson);
} catch (JSONException e){
e.printStackTrace();
}
// 发送消息
EMChatManager.getInstance().sendMessage(message, new EMCallBack(){...});
另外,GCM 推送可以在 "em_apns_ext" 中传入 "collapseKey"、"timeToLive"来控制推送的相关属性,详见
[[https://developers.google.com/cloud-messaging/http-server-ref|GCM 文档]]
----
上一页:[[start:200androidcleintintegration:20iosnickname|设置当前登录用户的 iOS 推送昵称]]
下一页:[[start:200androidcleintintegration:140hxuidemo|环信UI Demo]]
===== 收不到离线推送? =====
您可以登录[[https://console.easemob.com|环信管理后台]],在应用列表中选中相应的APP,再点击"IM用户",在用户列表中搜索收不到推送的用户,找到相应的用户后,点击右侧的"操作"下拉菜单,再点击"测试离线推送",系统会推送一条测试消息给这个用户,如果出现了问题会做出对应的错误原因提示来协助您排查问题,可能的错误提示有:
* 用户不存在
* 用户没有绑定Device Token
* 用户没有绑定证书
* 证书不存在或被禁