====== 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 * 用户没有绑定证书 * 证书不存在或被禁