环信登录提示 invalid user or password
接入环信的时候,遇到登录的问题。用环信demo注册的用户,在自己注册的appkey中是无法登录的。需要自己去注册的管理后台添加对应IM用户才能登录。在此记录一下,希望对遇到同样问题的朋友有帮助。
imGeek社区上线现金打赏功能,拥抱共享经济开启单点技术问题众包新模式
(下面是我们PR写的新闻稿,高大上吧)
一提到共享经济必定会提到Uber和Airbnb,这两只巨无霸独角兽的崛起让“共享经济”一词异常火热,作为共享经济最具代表性的两家企业,Uber和Airbnb分别为出租车业和酒店业带来了革命性的改变,也让人们看到了共享经济在未来的巨大潜力。共享经济这种新的经济模式并不只会在出租车业和酒店业发挥作用,利用人们业余时间和空间的特点,它几乎可以渗透到各个行业,当然移动开发市场也首当其冲。
偶们imGeek开发者社区(http://www.imgeek.org)已悄然上线现金打赏功能,在所有问题回复的下侧悄然出现了一个“赞赏”图标。这个是imGeek开发者社区在共享经济浪潮中的一次尝试,希望借助开发者的力量帮助开发者,人人为我,我为人人。
“赞赏”功能一经推出,受到了开发者的热烈追捧,同时不少论坛KOL们已经陆续收到不少“赞赏”,少则一元,多则上百元,虽然钱数总额不多,但能激发人类最原始的互助潜能,也是对知识的一种尊重。正如打赏时弹出的“知识价值的认可,源自您的赞赏”,正是开发者之间相互的认可,促进了社区中提出的问题可以得到及时的回复。据观察,imGeek开发者社区上面的提出的问题基本在10分钟以内即可得到回复,一个问题基本可以很快的得到解决。
在共享经济的浪潮中也催生了软件服务行业众包模式。其中,Coding,猿团因为众包分别得到了资本的青睐,开源中国更是凭借众包概念上了新三板。 但笔者认为,软件行业的众包并不是一个新生事物,软件项目的外包失败大多是因为项目发包方过于强势,需求变化频繁,众包并不能真正解决这些问题。
但如果将一个项目分解为一个个技术问题, 通过对单点技术问题进行众包,每次付费的金额少,笔者认为imGeek开发者社区这种运营做法是更易操作的方式。 现在imGeek开发者社区的“赞赏”功能还仅是依赖开发者志愿进行,并不强制,这样的操作既照顾到社区的自发性,也为那些乐于分享的勤恳开发者提供了高于社区荣誉的经济收益。
基于互联网的共享经济目前来看已经大大改变了不少行业的格局,相对传统行业,它们拥有更大的优势:1,更节约的时间。2,更优化的资源配置。3,更灵活的就业。也许不久的将来,imGeek开发者社区将在共享经济和众包的浪潮中趟出一条新路。
据悉,imGeek开发者社区是由环信赞助,截止2015年5月,环信服务了23763个App以及几万开发者,环信的创始团队均是世界著名开源项目的贡献者,运营总监是原开源力量社区的创始人,相信正是由于他们对移动开发者的深度了解,促使imGeek开发者社区将逐步发展成为移动开发者们的核心聚集地。 收起阅读 »
一提到共享经济必定会提到Uber和Airbnb,这两只巨无霸独角兽的崛起让“共享经济”一词异常火热,作为共享经济最具代表性的两家企业,Uber和Airbnb分别为出租车业和酒店业带来了革命性的改变,也让人们看到了共享经济在未来的巨大潜力。共享经济这种新的经济模式并不只会在出租车业和酒店业发挥作用,利用人们业余时间和空间的特点,它几乎可以渗透到各个行业,当然移动开发市场也首当其冲。
偶们imGeek开发者社区(http://www.imgeek.org)已悄然上线现金打赏功能,在所有问题回复的下侧悄然出现了一个“赞赏”图标。这个是imGeek开发者社区在共享经济浪潮中的一次尝试,希望借助开发者的力量帮助开发者,人人为我,我为人人。
“赞赏”功能一经推出,受到了开发者的热烈追捧,同时不少论坛KOL们已经陆续收到不少“赞赏”,少则一元,多则上百元,虽然钱数总额不多,但能激发人类最原始的互助潜能,也是对知识的一种尊重。正如打赏时弹出的“知识价值的认可,源自您的赞赏”,正是开发者之间相互的认可,促进了社区中提出的问题可以得到及时的回复。据观察,imGeek开发者社区上面的提出的问题基本在10分钟以内即可得到回复,一个问题基本可以很快的得到解决。
在共享经济的浪潮中也催生了软件服务行业众包模式。其中,Coding,猿团因为众包分别得到了资本的青睐,开源中国更是凭借众包概念上了新三板。 但笔者认为,软件行业的众包并不是一个新生事物,软件项目的外包失败大多是因为项目发包方过于强势,需求变化频繁,众包并不能真正解决这些问题。
但如果将一个项目分解为一个个技术问题, 通过对单点技术问题进行众包,每次付费的金额少,笔者认为imGeek开发者社区这种运营做法是更易操作的方式。 现在imGeek开发者社区的“赞赏”功能还仅是依赖开发者志愿进行,并不强制,这样的操作既照顾到社区的自发性,也为那些乐于分享的勤恳开发者提供了高于社区荣誉的经济收益。
基于互联网的共享经济目前来看已经大大改变了不少行业的格局,相对传统行业,它们拥有更大的优势:1,更节约的时间。2,更优化的资源配置。3,更灵活的就业。也许不久的将来,imGeek开发者社区将在共享经济和众包的浪潮中趟出一条新路。
据悉,imGeek开发者社区是由环信赞助,截止2015年5月,环信服务了23763个App以及几万开发者,环信的创始团队均是世界著名开源项目的贡献者,运营总监是原开源力量社区的创始人,相信正是由于他们对移动开发者的深度了解,促使imGeek开发者社区将逐步发展成为移动开发者们的核心聚集地。 收起阅读 »
推荐算法和机器学习入门
互联网是什么?
马云说:“很多人还没搞清楚什么是PC互联网的时候,移动互联网来了,我们还没搞清楚移动互联的时候,大数据时代又来了。”
大数据又是什么?
有人说,从庞杂的数据背后挖掘、分析用户的行为习惯和喜好,找出更符合用户“口味”的产品和服务,就是大数据。
且听浙江网新恒天大数据技术负责人李海峰为大家分享的课程。
课程视频:
推荐算法和机器学习入门介绍
<烟波浩渺,算法为王>
<他山之石,可以攻玉> 收起阅读 »
马云说:“很多人还没搞清楚什么是PC互联网的时候,移动互联网来了,我们还没搞清楚移动互联的时候,大数据时代又来了。”
大数据又是什么?
有人说,从庞杂的数据背后挖掘、分析用户的行为习惯和喜好,找出更符合用户“口味”的产品和服务,就是大数据。
且听浙江网新恒天大数据技术负责人李海峰为大家分享的课程。
课程视频:
推荐算法和机器学习入门介绍
<烟波浩渺,算法为王>
<他山之石,可以攻玉> 收起阅读 »
Java实现环信服务器端接口,需要的联系我qq1138789752
本人花了1周实现本测试了目前环信服务端所有的接口,需要的代码克联系我qq1138789752,接口列表如下:
import java.io.File;
import com.liaozi.imhere.entity.TalkMsg;
import com.liaozi.imhere.entity.TalkNode;
public interface TalkDataService {
/**
* 登录环信平台
* @param username 注册账户
* @param password 登录密码
* @param nickname 用户昵称
* */
public TalkNode login(String username, String password) throws Exception;
/**
* 退出环信平台
* @param username 注册账户
* */
public TalkNode logout(String username) throws Exception;
/**
* 添加用户信息(单个)
* @param username 注册账户
* @param password 登录密码
* @param nickname 用户昵称
* */
public TalkNode userSave(String username, String password, String nickname) throws Exception;
/**
* 添加用户信息(批量)
* @param username 注册账户
* @param password 登录密码
* @param nickname 用户昵称
* */
public TalkNode userSave(String[] username, String[] password, String[] nickname) throws Exception;
/**
* 删除用户信息(单个)
* @param username 注册账户
* */
public TalkNode userDrop(String username) throws Exception;
/**
* 删除用户信息(批量)
* @param size 当前页数
* */
public TalkNode userDrop(Long size) throws Exception;
/**
* 启用禁用账户
* @param username 注册账户
* */
public TalkNode userModifyAccess(String username, Boolean access) throws Exception;
/**
* 修改用户密码
* @param username 注册账户
* @param password 登录密码
* */
public TalkNode userModifyPassword(String username, String password) throws Exception;
/**
* 修改用户昵称
* @param username 注册账户
* @param nickname 用户昵称
* */
public TalkNode userModifyNickname(String username, String nickname) throws Exception;
/**
* 获取用户信息
* @param username 注册账户
* */
public TalkNode userGet(String username) throws Exception;
/**
* 获取用户信息
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode userList(Long size, String cursor, Long start) throws Exception;
/**
* 判断用户状态
* @param username 注册账户
* */
public TalkNode userLine(String username) throws Exception;
/**
* 获取所属群组(好友群)
* @param username 注册账户
* */
public TalkNode userGroupList(String username) throws Exception;
/**
* 获取所属群组(聊天室)
* @param username 注册账户
* */
public TalkNode userRoomList(String username) throws Exception;
/**
* 获取消息数量(离线)
* @param username 注册账户
* */
public TalkNode userMessageCount(String username) throws Exception;
/**
* 获取消息状态(离线)
* @param username 注册账户
* @param id 消息编号
* */
public TalkNode userMessageLine(String username, String id) throws Exception;
/**
* 添加好友账户
* @param username 注册账户
* @param friend 好友账户
* */
public TalkNode friendSave(String username, String friend) throws Exception;
/**
* 删除好友账户
* @param username 注册账户
* @param friend 好友账户
* */
public TalkNode friendDrop(String username, String friend) throws Exception;
/**
* 获取好友列表
* @param username 注册账户
* */
public TalkNode friendList(String username) throws Exception;
/**
* 添加拦截账户
* @param username 注册账户
* @param friend 拦截账户
* */
public TalkNode blockSave(String username, String[] friend) throws Exception;
/**
* 删除拦截账户
* @param username 注册账户
* @param friend 拦截账户
* */
public TalkNode blockDrop(String username, String friend) throws Exception;
/**
* 获取拦截列表
* @param username 注册账户
* */
public TalkNode blockList(String username) throws Exception;
/**
* 添加群组信息
* @param owner 所属用户
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* @param friend 好友账户
* */
public TalkNode groupSave(String owner, String name, String desc, Integer limit, String[] friend) throws Exception;
/**
* 删除群组信息
* @param id 群组编号
* */
public TalkNode groupDrop(String id) throws Exception;
/**
* 修改群组信息
* @param id 群组编号
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* */
public TalkNode groupModify(String id, String name, String desc, Integer limit) throws Exception;
/**
* 修改群组群主
* @param id 群组编号
* @param owner 所属用户
* */
public TalkNode groupModifyOwner(String id, String owner) throws Exception;
/**
* 获取群组信息
* @param id 群组编号
* */
public TalkNode groupGet(String[] id) throws Exception;
/**
* 获取群组列表
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode groupList(Long size, String cursor, Long start) throws Exception;
/**
* 添加群组好友(单个)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendSave(String id, String friend) throws Exception;
/**
* 添加群组好友(批量)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendSave(String id, String[] friend) throws Exception;
/**
* 删除群组好友(单个)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendDrop(String id, String friend) throws Exception;
/**
* 删除群组好友(批量)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendDrop(String id, String[] friend) throws Exception;
/**
* 获取群组好友
* @param id 群组编号
* */
public TalkNode groupFriendList(String id) throws Exception;
/**
* 添加群组拦截(单个)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackSave(String id, String friend) throws Exception;
/**
* 添加群组拦截(批量)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackSave(String id, String[] friend) throws Exception;
/**
* 删除群组拦截(单个)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackDrop(String id, String friend) throws Exception;
/**
* 删除群组拦截(批量)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackDrop(String id, String[] friend) throws Exception;
/**
* 获取群组拦截
* @param id 群组编号
* */
public TalkNode groupBlackList(String id) throws Exception;
/**
* 上传文件数据
* @param file 文件数据
* */
public TalkNode fileUpload(File file) throws Exception;
/**
* 下载文件数据
* @param id 文件编号
* @param share 分享编号
* @param thumb 是否缩放
* @param file 本地文件
* */
public void fileDown(String id, String share, Boolean thumb, File file) throws Exception;
/**
* 添加消息数据
* @param data 消息数据
* */
public TalkNode messageSave(TalkMsg data) throws Exception;
/**
* 获取消息列表
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode messageList(Long size, String cursor, Long start) throws Exception;
/**
* 获取聊天列表
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode chatList(Long size, String cursor, Long start) throws Exception;
/**
* 添加聊天群组
* @param owner 所属用户
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* @param friend 聊天账户
* */
public TalkNode roomSave(String owner, String name, String desc, Integer limit, String[] friend) throws Exception;
/**
* 修改聊天群组
* @param id 群组编号
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* */
public TalkNode roomModify(String id, String name, String desc, Integer limit) throws Exception;
/**
* 删除聊天群组
* @param id 群组编号
* */
public TalkNode roomDrop(String id) throws Exception;
/**
* 获取聊天群组
* @param id 群组编号
* */
public TalkNode roomGet(String id) throws Exception;
/**
* 获取聊天群组
* */
public TalkNode roomList() throws Exception;
/**
* 获取聊天好友(单个)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendSave(String id, String friend) throws Exception;
/**
* 获取聊天好友(批量)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendSave(String id, String[] friend) throws Exception;
/**
* 删除聊天好友(单个)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendDrop(String id, String friend) throws Exception;
/**
* 删除聊天好友(批量)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendDrop(String id, String[] friend) throws Exception;
} 收起阅读 »
import java.io.File;
import com.liaozi.imhere.entity.TalkMsg;
import com.liaozi.imhere.entity.TalkNode;
public interface TalkDataService {
/**
* 登录环信平台
* @param username 注册账户
* @param password 登录密码
* @param nickname 用户昵称
* */
public TalkNode login(String username, String password) throws Exception;
/**
* 退出环信平台
* @param username 注册账户
* */
public TalkNode logout(String username) throws Exception;
/**
* 添加用户信息(单个)
* @param username 注册账户
* @param password 登录密码
* @param nickname 用户昵称
* */
public TalkNode userSave(String username, String password, String nickname) throws Exception;
/**
* 添加用户信息(批量)
* @param username 注册账户
* @param password 登录密码
* @param nickname 用户昵称
* */
public TalkNode userSave(String[] username, String[] password, String[] nickname) throws Exception;
/**
* 删除用户信息(单个)
* @param username 注册账户
* */
public TalkNode userDrop(String username) throws Exception;
/**
* 删除用户信息(批量)
* @param size 当前页数
* */
public TalkNode userDrop(Long size) throws Exception;
/**
* 启用禁用账户
* @param username 注册账户
* */
public TalkNode userModifyAccess(String username, Boolean access) throws Exception;
/**
* 修改用户密码
* @param username 注册账户
* @param password 登录密码
* */
public TalkNode userModifyPassword(String username, String password) throws Exception;
/**
* 修改用户昵称
* @param username 注册账户
* @param nickname 用户昵称
* */
public TalkNode userModifyNickname(String username, String nickname) throws Exception;
/**
* 获取用户信息
* @param username 注册账户
* */
public TalkNode userGet(String username) throws Exception;
/**
* 获取用户信息
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode userList(Long size, String cursor, Long start) throws Exception;
/**
* 判断用户状态
* @param username 注册账户
* */
public TalkNode userLine(String username) throws Exception;
/**
* 获取所属群组(好友群)
* @param username 注册账户
* */
public TalkNode userGroupList(String username) throws Exception;
/**
* 获取所属群组(聊天室)
* @param username 注册账户
* */
public TalkNode userRoomList(String username) throws Exception;
/**
* 获取消息数量(离线)
* @param username 注册账户
* */
public TalkNode userMessageCount(String username) throws Exception;
/**
* 获取消息状态(离线)
* @param username 注册账户
* @param id 消息编号
* */
public TalkNode userMessageLine(String username, String id) throws Exception;
/**
* 添加好友账户
* @param username 注册账户
* @param friend 好友账户
* */
public TalkNode friendSave(String username, String friend) throws Exception;
/**
* 删除好友账户
* @param username 注册账户
* @param friend 好友账户
* */
public TalkNode friendDrop(String username, String friend) throws Exception;
/**
* 获取好友列表
* @param username 注册账户
* */
public TalkNode friendList(String username) throws Exception;
/**
* 添加拦截账户
* @param username 注册账户
* @param friend 拦截账户
* */
public TalkNode blockSave(String username, String[] friend) throws Exception;
/**
* 删除拦截账户
* @param username 注册账户
* @param friend 拦截账户
* */
public TalkNode blockDrop(String username, String friend) throws Exception;
/**
* 获取拦截列表
* @param username 注册账户
* */
public TalkNode blockList(String username) throws Exception;
/**
* 添加群组信息
* @param owner 所属用户
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* @param friend 好友账户
* */
public TalkNode groupSave(String owner, String name, String desc, Integer limit, String[] friend) throws Exception;
/**
* 删除群组信息
* @param id 群组编号
* */
public TalkNode groupDrop(String id) throws Exception;
/**
* 修改群组信息
* @param id 群组编号
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* */
public TalkNode groupModify(String id, String name, String desc, Integer limit) throws Exception;
/**
* 修改群组群主
* @param id 群组编号
* @param owner 所属用户
* */
public TalkNode groupModifyOwner(String id, String owner) throws Exception;
/**
* 获取群组信息
* @param id 群组编号
* */
public TalkNode groupGet(String[] id) throws Exception;
/**
* 获取群组列表
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode groupList(Long size, String cursor, Long start) throws Exception;
/**
* 添加群组好友(单个)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendSave(String id, String friend) throws Exception;
/**
* 添加群组好友(批量)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendSave(String id, String[] friend) throws Exception;
/**
* 删除群组好友(单个)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendDrop(String id, String friend) throws Exception;
/**
* 删除群组好友(批量)
* @param id 群组编号
* @param friend 好友账户
* */
public TalkNode groupFriendDrop(String id, String[] friend) throws Exception;
/**
* 获取群组好友
* @param id 群组编号
* */
public TalkNode groupFriendList(String id) throws Exception;
/**
* 添加群组拦截(单个)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackSave(String id, String friend) throws Exception;
/**
* 添加群组拦截(批量)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackSave(String id, String[] friend) throws Exception;
/**
* 删除群组拦截(单个)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackDrop(String id, String friend) throws Exception;
/**
* 删除群组拦截(批量)
* @param id 群组编号
* @param friend 拦截账户
* */
public TalkNode groupBlackDrop(String id, String[] friend) throws Exception;
/**
* 获取群组拦截
* @param id 群组编号
* */
public TalkNode groupBlackList(String id) throws Exception;
/**
* 上传文件数据
* @param file 文件数据
* */
public TalkNode fileUpload(File file) throws Exception;
/**
* 下载文件数据
* @param id 文件编号
* @param share 分享编号
* @param thumb 是否缩放
* @param file 本地文件
* */
public void fileDown(String id, String share, Boolean thumb, File file) throws Exception;
/**
* 添加消息数据
* @param data 消息数据
* */
public TalkNode messageSave(TalkMsg data) throws Exception;
/**
* 获取消息列表
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode messageList(Long size, String cursor, Long start) throws Exception;
/**
* 获取聊天列表
* @param size 当前页数
* @param cursor 当前游标
* @param start 开始毫秒
* */
public TalkNode chatList(Long size, String cursor, Long start) throws Exception;
/**
* 添加聊天群组
* @param owner 所属用户
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* @param friend 聊天账户
* */
public TalkNode roomSave(String owner, String name, String desc, Integer limit, String[] friend) throws Exception;
/**
* 修改聊天群组
* @param id 群组编号
* @param name 群组名称
* @param desc 群组描述
* @param limit 用户上限
* */
public TalkNode roomModify(String id, String name, String desc, Integer limit) throws Exception;
/**
* 删除聊天群组
* @param id 群组编号
* */
public TalkNode roomDrop(String id) throws Exception;
/**
* 获取聊天群组
* @param id 群组编号
* */
public TalkNode roomGet(String id) throws Exception;
/**
* 获取聊天群组
* */
public TalkNode roomList() throws Exception;
/**
* 获取聊天好友(单个)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendSave(String id, String friend) throws Exception;
/**
* 获取聊天好友(批量)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendSave(String id, String[] friend) throws Exception;
/**
* 删除聊天好友(单个)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendDrop(String id, String friend) throws Exception;
/**
* 删除聊天好友(批量)
* @param id 群组编号
* @param friend 聊天账户
* */
public TalkNode roomFriendDrop(String id, String[] friend) throws Exception;
} 收起阅读 »
imgeek社区上线“活动”板块,求玩环
社区上线“活动”板块,公测中,求玩环
http://www.imgeek.org/activity/
花了偶们一个月的时间,改版后的社区活动模块开始公测,相对于以前的和传统的活动报名网站,有了几个改进:
1. 开放演讲报名
2. 开放投票,你的投票将决定演讲顺序
3. 未注册用户也可以报名
4. 活动中的提问和社区相结合,在活动中的提问将进入社区问题流,更多的人将会看到你的问题
5. 开放合作伙伴和志愿者申请通道,并得到展示
收起阅读 »
http://www.imgeek.org/activity/
花了偶们一个月的时间,改版后的社区活动模块开始公测,相对于以前的和传统的活动报名网站,有了几个改进:
1. 开放演讲报名
2. 开放投票,你的投票将决定演讲顺序
3. 未注册用户也可以报名
4. 活动中的提问和社区相结合,在活动中的提问将进入社区问题流,更多的人将会看到你的问题
5. 开放合作伙伴和志愿者申请通道,并得到展示
收起阅读 »
php和nodejs服务端代码示例参考
https://github.com/easemob/emchat-server-examples 这个github上的php和nodejs已经是最新代码,找不到的小伙伴也可以从这里下载查看,有什么问题欢迎随时交流,我QQ:1003432453,邮箱:fengpei@easemob.com。 收起阅读 »
新版AndroidStudio以及新版sdk开发环境创建新项目可能会出现的一些错误问题
首先说下我这边开发的环境:
AndroidStudio version:1.4.1
jdk version:1.7.0
SDKTools version:24.4.x
Build-tools version:23.0.1
Compile SDK version:API 22 (5.1)
Minimum SDK version:API 15(4.0.3)
Gradle version:2.4
连接地址:
AndroidStudio等工具地址:
Android官网:http://developer.android.com/
国内收集: http://www.androiddevtools.cn/
gradle v2.4下载(as有时自动下载不成功,所以要自己下载):https://downloads.gradle.org/distributions/gradle-2.4-all.zip
关于gradle首次创建项目卡住的问题可以看下这篇文章AndroidStudio 新建及clone项目关于gradle出现的问题"
创建项目
这里使用AndroidStudio创建一个空的项目就OK了,
打开AndroidStudio 点击Start a new Android Studio project创建新项目
当创建成功后发现会出现了一些问题
这个是因为最新的创建项目会使用junit库来进行代码测试,在下载这个库的内容的时候发现他引用了hamcrest这个框架,不过国内下载这个框架的这个接啊日报hamcrest-core.jar不成功,所以会报这个错误,可以把build.gradle里引用的junit给删除或注释
这个是因为创建项目默认使用appcompat-v7包23.0.1版本,这个版本好像有问题,手动把这个版本号改下就ok了,改成22.+然后同步 就ok
同步发表到个人博客:http://blog.melove.net 收起阅读 »
AndroidStudio version:1.4.1
jdk version:1.7.0
SDKTools version:24.4.x
Build-tools version:23.0.1
Compile SDK version:API 22 (5.1)
Minimum SDK version:API 15(4.0.3)
Gradle version:2.4
连接地址:
AndroidStudio等工具地址:
Android官网:http://developer.android.com/
国内收集: http://www.androiddevtools.cn/
gradle v2.4下载(as有时自动下载不成功,所以要自己下载):https://downloads.gradle.org/distributions/gradle-2.4-all.zip
关于gradle首次创建项目卡住的问题可以看下这篇文章AndroidStudio 新建及clone项目关于gradle出现的问题"
创建项目
这里使用AndroidStudio创建一个空的项目就OK了,
打开AndroidStudio 点击Start a new Android Studio project创建新项目
当创建成功后发现会出现了一些问题
问题一
Error:A problem occurred configuring project ':app'.
> Could not download junit.jar (junit:junit:4.12)
> Could not get resource 'https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.jar'.
> Could not GET 'https://jcenter.bintray.com/junit/junit/4.12/junit-4.12.jar'.
> peer not authenticated
Error:A problem occurred configuring project ':app'.
> Could not download hamcrest-core.jar (org.hamcrest:hamcrest-core:1.3): No cached version available for offline mode
这个是因为最新的创建项目会使用junit库来进行代码测试,在下载这个库的内容的时候发现他引用了hamcrest这个框架,不过国内下载这个框架的这个接啊日报hamcrest-core.jar不成功,所以会报这个错误,可以把build.gradle里引用的junit给删除或注释
问题二
D:\develop\android\workspace\studio\EaseUICustomer\app\build\intermediates\exploded-aar\com.android.support\appcompat-v7\23.1.0\res\values-v23\values-v23.xml
Error:(2) Error retrieving parent for item: No resource found that matches the given name 'android:TextAppearance.Material.Widget.Button.Inverse'.
Error:(2) Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Material.Button.Colored'.
Error:Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'D:\develop\android\android_sdk\build-tools\build-tools-23.0.1\aapt.exe'' finished with non-zero exit value 1
这个是因为创建项目默认使用appcompat-v7包23.0.1版本,这个版本好像有问题,手动把这个版本号改下就ok了,改成22.+然后同步 就ok
同步发表到个人博客:http://blog.melove.net 收起阅读 »
AndroidStudio一个工程内查看多个项目的实现
现在已经有很多人开始使用AndroidStudio开始开发Android了,但是这货有一点儿不好,一个界面只能打开一个项目,当我们在开发自己的项目时,如果想像eclipse查看别的demo的代码或者功能,只能再另外打开一个Window新开项目,其实呢AndroidStudio可以在一个项目中导入多个Module,这里以导入环信最新版的几个demo来实现在AndroidStudi中查看多个项目;
首先导入3.0的项目,3.0的demo引入了EaseUI库,在导入AndroidStudio的时候会以Module的形式自动导入EaseUI,EaseUI库中放着simpledemo这个小demo,我们先把它剪切出来,和其他的demo放在一起,等下我们就在一个AndroidStudio项目中导入环信的这些全部demo
首先导入3.0Demo:
因为要导入所有的demo所以给导入的项目重新命名下
导入完成后就可以开始导入其他项目了,不过想在当前项目中导入其他项目要选择Import Module的方式,下边以导入环信老版本的demo为例
OK 导入成功,可以看到项目中有三个Module了 easeUI easeUIDemo oldDemo,其中oldDemo就是刚才导入的老版本的demo,只是改了个名字
然后看下Run/Debug configuration 可以发现这里有两个配置项,就说明当前工程内有两个可运行的Android项目
下边再导入那个简单的easeuidemo看下
导入之后看下Project Structure 可以看到当前项目有四个Module,一个EaseUI library库,其他三个是Android app项目easeUIDemo 和easeUISimpleDemo引用了EaseUI库,oldDemo是老版本直接集成的demo
可以根据这里的选择来运行不同的module,并且可以在一个工程内查看所有的代码
同步发表到个人博客:http://melove.net
文章地址:http://blog.melove.net/lzan13/develops/android-develop/androidstudio-project-module-941.html 收起阅读 »
首先导入3.0的项目,3.0的demo引入了EaseUI库,在导入AndroidStudio的时候会以Module的形式自动导入EaseUI,EaseUI库中放着simpledemo这个小demo,我们先把它剪切出来,和其他的demo放在一起,等下我们就在一个AndroidStudio项目中导入环信的这些全部demo
首先导入3.0Demo:
因为要导入所有的demo所以给导入的项目重新命名下
导入完成后就可以开始导入其他项目了,不过想在当前项目中导入其他项目要选择Import Module的方式,下边以导入环信老版本的demo为例
OK 导入成功,可以看到项目中有三个Module了 easeUI easeUIDemo oldDemo,其中oldDemo就是刚才导入的老版本的demo,只是改了个名字
然后看下Run/Debug configuration 可以发现这里有两个配置项,就说明当前工程内有两个可运行的Android项目
下边再导入那个简单的easeuidemo看下
导入之后看下Project Structure 可以看到当前项目有四个Module,一个EaseUI library库,其他三个是Android app项目easeUIDemo 和easeUISimpleDemo引用了EaseUI库,oldDemo是老版本直接集成的demo
可以根据这里的选择来运行不同的module,并且可以在一个工程内查看所有的代码
同步发表到个人博客:http://melove.net
文章地址:http://blog.melove.net/lzan13/develops/android-develop/androidstudio-project-module-941.html 收起阅读 »
环信移动客服云产品使用指南抢先看
问产品经理拿到新鲜出炉带着热气的产品使用指南。
这个不是最终版,正式版本以这里的为准: http://docs.easemob.com/
要提前学习的同学可以下载啦! 免费注册试用环信移动客服云-->
这个不是最终版,正式版本以这里的为准: http://docs.easemob.com/
要提前学习的同学可以下载啦! 免费注册试用环信移动客服云-->
关于环信新版EaseUI库导入AndroidStudio问题
环信大牛最新封装了一个供开发者直接使用的UI库 EaseUI,这个可以让大家快速的进行集成环信的sdk进行实现聊天,官方也说了老版本的demo不会进行维护,重点维护这个EaseUI,但是在自己导入的时候有时会有些问题,这里用1.4版本的AndroidStudio导入3.0的demo来说明下;
首先就是打开as导入项目
我喜欢给他改个名字EaseUIDemo
导入完成
我这边导入时没有问题的,有时导入demo或者我们自己创建的项目 然后导入easeui库,并加入到自己的项目中去的时候可能会出现下边这样的错误 ,出现问题的原因的大致因为EaseUI默认引入的v4包的版本20.0.0,但是大家的开发环境不同,sdk版本以及编译器和support库版本不同,会出现错误;
设置了之后,要记得同步gradle 1 or 2 方式都可以
如果是自己创建的项目想在as中引入EaseUI库,可以点击File->New->Import Module选项
同步发表到个人博客:http://melove.net 收起阅读 »
首先就是打开as导入项目
我喜欢给他改个名字EaseUIDemo
导入完成
我这边导入时没有问题的,有时导入demo或者我们自己创建的项目 然后导入easeui库,并加入到自己的项目中去的时候可能会出现下边这样的错误 ,出现问题的原因的大致因为EaseUI默认引入的v4包的版本20.0.0,但是大家的开发环境不同,sdk版本以及编译器和support库版本不同,会出现错误;
解决办法:这个时候就去点击项目设置,选中EaseUI把sdk版本设置成和build.gradle里一样的版本就行了,如果过低,建议更新sdk,还不行,就把自己的项目的sdk版本和EaseUI都设置成一样,v4库也设置成一样
设置了之后,要记得同步gradle 1 or 2 方式都可以
如果是自己创建的项目想在as中引入EaseUI库,可以点击File->New->Import Module选项
同步发表到个人博客:http://melove.net 收起阅读 »
关于新版AndroidStudio导入环信Demo的一些注意事项
这里是以AndroidStudio v1.4版本为例
新版AndroidStudio已经可以直接导入eclipse的项目了,具体步骤看下边(会的飘过)
有一点要注意:as导入eclipse的项目,如果项目有引入library项目,并且library项目路径正确,as在导入eclipse的项目的同时会自动导入library为module
启动as 进入起始页,有些设置的是启动直接打开项目了,可以在设置里先设置下:
设置了之后,在启动就是进入到启动界面了:
选择Import project(Eclipse ADT, Gradle, etc)选项开始选择导入eclipse创建的Android项目
然后选择项目路径,这里以最新版环信demo2.2.4为例
然后选择项目目的路径(相当于工作空间,带上项目目录名)
提示目录不存在,不存在就对了 ok
继续默认 Finish
然后就是等待,这个一般有时会卡住,因为有时需要下载gradle的包,会很慢很慢,解决办法就是自己去gradle官网去下载gradle包,至于怎么解决看下这篇:关于环信新版EaseUI库导入AndroidStudio问题
导入成功,打开项目就是这样了
下边多说一句,就是如果自己创建的项目想要引用EaseUI这个库(不只是这个库,其他任何的library库),可以直接在项目界面,点击菜单栏File->New->Import Module 然后选择easeui路径就ok
同步发表到个人博客:http://melove.net 收起阅读 »
新版AndroidStudio已经可以直接导入eclipse的项目了,具体步骤看下边(会的飘过)
有一点要注意:as导入eclipse的项目,如果项目有引入library项目,并且library项目路径正确,as在导入eclipse的项目的同时会自动导入library为module
启动as 进入起始页,有些设置的是启动直接打开项目了,可以在设置里先设置下:
设置了之后,在启动就是进入到启动界面了:
选择Import project(Eclipse ADT, Gradle, etc)选项开始选择导入eclipse创建的Android项目
然后选择项目路径,这里以最新版环信demo2.2.4为例
注意:环信的ChatDemoUI这个demo里边因为研发的同事为了照顾老版本的as使用者,已经用eclipse生成了build.gradle文件,所以如果要导入新版as 请把build.gradle删除
然后选择项目目的路径(相当于工作空间,带上项目目录名)
提示目录不存在,不存在就对了 ok
继续默认 Finish
然后就是等待,这个一般有时会卡住,因为有时需要下载gradle的包,会很慢很慢,解决办法就是自己去gradle官网去下载gradle包,至于怎么解决看下这篇:关于环信新版EaseUI库导入AndroidStudio问题
导入成功,打开项目就是这样了
下边多说一句,就是如果自己创建的项目想要引用EaseUI这个库(不只是这个库,其他任何的library库),可以直接在项目界面,点击菜单栏File->New->Import Module 然后选择easeui路径就ok
同步发表到个人博客:http://melove.net 收起阅读 »
新增“代码”区
收录了基于环信SDK开发的开源项目,大家写代码的时候就有更多参考了。
如果你们什么好的项目,特别是基于环信SDK开发的,并且愿意开源分享出来,请在http://www.imgeek.org/page/code后跟贴回复,我们将收录在的“代码”区,让你的成果与更多人分享。
收起阅读 »
如果你们什么好的项目,特别是基于环信SDK开发的,并且愿意开源分享出来,请在http://www.imgeek.org/page/code后跟贴回复,我们将收录在的“代码”区,让你的成果与更多人分享。
收起阅读 »
ASN 和 PB 的编码效率比较
作者:王纯业 ,转自http://blog.easemob.com/
### 第一个例子
http://martin.kleppmann.com/2012/12/05/schema-evolution-in-avro-protocol-buffers-thrift.html 是一个很好的比较例子。
我类似的做了一个 ASN1 的结构
```
Person DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Person ::= SEQUENCE {
username PrintableString,
favouritenumber INTEGER,
interests SEQUENCE OF PrintableString
}
END
```
用下面的方法编译
```
erlc -I. -bper Person.asn
erl
> c("Person").
{ok,'Person'}
> {ok, B} = 'Person':encode('Person', #'Person'{username = "Martin", favouritenumber = 1337, interests = ["daydreaming", "hacking"]}).
{ok,<<6,77,97,114,116,105,110,2,5,57,2,11,100,97,121,100,
114,101,97,109,105,110,103,7,104,97,99,...>>}
> byte_size(B).
31
```
这个例子里面,ASN1 用了 31 bytes ,protobuf 用了 33 bytes, Avro 用了
32 bytes。 这不是一个公平的比较,对于大量使用小数据结构的时候,例如,
enum command type 之类的,ASN1 可以节省更多的 bytes 。
### 第二个例子
这是 protobuf 的定义。
```
package dummy;
message S {
optional int32 a =1;
optional bool b =2;
optional int32 c =3;
optional D d =4;
}
message D {
optional bool d1 = 1;
optional bool d2 = 2;
}
```
用 erlang 编译 参考 [https://github.com/tomas-abrahamsson/gpb]()
```
> deps/gpb/bin/protoc-erl -I. -o-erl src -o-hrl include s1.proto
> erl -sname a@localhost
(a@localhost)1> R = #'S'{a=1,b=true,c=2, d=#'D'{d1 = true, d2 = true} }.
#'S'{a =1,b = true,c = 2,d = #'D'{d1 = true,d2 = true}}
(sync@localhost)2> s1:encode_msg(R).
<<8,1,16,1,24,2,34,4,8,1,16,1>>
(a@localhost)14> byte_size(s1:encode_msg(R)).
12
```
可以看到 protobuf 用了 12 个字节。
ASN1 的例子,使用 PER 编码方式。
```
Dummy DEFINITIONS AUTOMATIC TAGS ::=
BEGIN
Dummy ::= SEQUENCE {
a INTEGER (0..7),
b BOOLEAN,
c INTEGER (0..3),
d SEQUENCE {
d1 BOOLEAN,
d2 BOOLEAN }}
END
```
```
> erlc -I. -bper Dummy.asn
> erl
(a@localhost)1> 'Dummy':encode('Dummy', #'Dummy'{ a = 1, b = true, c = 2, d = #'Dummy_d'{d1= true, d2 = true }}).
{ok,<<";">>}
```
protobuf 用了 12 个字节, ASN1 用了 1 个字节。同样,这也不是一个公平的比较。
很难做出公平的比较。但是可以说在大多数情况下 ASNPER 的编码是更加节省带宽的。
### 为什么 ASN1 PER 的编码效率比 PB 的高
1. ASN1 PER 是面向 bit 的编码方式,PB 是面向字节的编码方式。
2. PB 中 message 都是可以扩展的,ASN1 中只有使用 `...` 关键字的类型,才是可以扩展的。
3. PB 中的整数很简单,都是可以扩展到 64 位,ASN1 中有更加灵活(复杂) 的整数扩展方式。
2. PB 中的 `required`, `optional`, `oneof`, 和 `extensions` 的特性,对编码没有影响。例如,就算是 `required` 的字段,编码的时候,也是需要 tag 。
3. ASN1 PER 对很多关键字都是敏感的。例如
1. `required` 的字段不会添加表明类型的 tag
2. `required` 的字段按顺序编码。
4. tag 在 PER 中不做编码。
5. by default, every message is extensible in PB. Instread, ASN1 extensibility should be explicitly specified.
4. PB 中支持的整数类型不支持 subtype, 而 ASN1 PER 中的整数支持 subtype , 可以实现高效编码。
### 使用 ASN1 的优点
1. 编码紧凑,节省带宽。这是为什么几乎所有的 2G/3G/4G/5G 的无线通信协议都使用 ASN1 的原因之一。
2. ASN1 久经考验,asn1c 的项目已经十多年了,依然活跃开发。 Erlang 因为是通信公司创造的,语言内嵌 ASN 的支持。 Erlang 没有默认支持 PB 需要使用第三方开发库。
3. ASN1 支持 XER (XML) ,可以方便的调试。
4. wireshark 本身对 ASN1 的支持很好。
### 使用 ASN1 PER 的风险
1. ASN1 本身很复杂。ASN1 的学习成本高
2. PER 编码很复杂。可以用700行 C 代码实现 PB 的编解码,但实现 PER 编码不行。
3. ASN1 对语言的支持不多,似乎只有 C/Erlang 有比较好的使用。由于历史原因,通信领域几乎没有其他语言可供选择。
收起阅读 »
【社区福利,Apache Con赠票,原价249元】 Apache年度大会
各位亲,凡imgeek社区注册会员,回复“我要赠票”,即可免费获得于本周六周日在北京中科院举办的Apache年度大会(价值249 RMB).
我们将通过后台私信给你免费参会码,你拿到这个码即可通过大会官网免费报名.
仅限前50位回复者!先到先得
大会官网:http://www.kaiyuanshe.cn/index.php?option=com_content&view=article&id=84
北京海淀区中关村东路80号,中科院大学管理学院教学楼
2015年10月24日 - 10月25日 ,本周六周日
优惠码使用方法:
购票链接:https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fwww.huodongxing.com%2fevent%2f9291887966700&data=01%7c01%7cemchen%40064d.mgd.microsoft.com%7c80feb925ffc5494b5f6b08d2d904a16c%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=3CRU6CWIo7rf5WIX7h7Xqk9e%2bn9pQfOkWW3HSN%2f5Dcg%3d
优惠码使用说明:
1 电脑操作(手机操作会有优惠码失效的情况)。请滚动鼠标,出现图示悬浮框后,点击“我要参加”;
页面会自动跳转到购票区域,点击票种 “第一天+第二天(不含大数据金牌训练营)”;
2. 页面会自动跳转到“请填写报名表单”。请把鼠标网上移动,页面会露出“请输入优惠码”的
使用框;
3. 输入优惠码点击“使用”,票面价格会显示“0”元;点击票种价格后的“我要参加”按钮,之后按照实际情况填写报名表单提交即可。
收起阅读 »
我们将通过后台私信给你免费参会码,你拿到这个码即可通过大会官网免费报名.
仅限前50位回复者!先到先得
大会官网:http://www.kaiyuanshe.cn/index.php?option=com_content&view=article&id=84
北京海淀区中关村东路80号,中科院大学管理学院教学楼
2015年10月24日 - 10月25日 ,本周六周日
优惠码使用方法:
购票链接:https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fwww.huodongxing.com%2fevent%2f9291887966700&data=01%7c01%7cemchen%40064d.mgd.microsoft.com%7c80feb925ffc5494b5f6b08d2d904a16c%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=3CRU6CWIo7rf5WIX7h7Xqk9e%2bn9pQfOkWW3HSN%2f5Dcg%3d
优惠码使用说明:
1 电脑操作(手机操作会有优惠码失效的情况)。请滚动鼠标,出现图示悬浮框后,点击“我要参加”;
页面会自动跳转到购票区域,点击票种 “第一天+第二天(不含大数据金牌训练营)”;
2. 页面会自动跳转到“请填写报名表单”。请把鼠标网上移动,页面会露出“请输入优惠码”的
使用框;
3. 输入优惠码点击“使用”,票面价格会显示“0”元;点击票种价格后的“我要参加”按钮,之后按照实际情况填写报名表单提交即可。
收起阅读 »
Android 开源项目源码解析(Volley、UIL、Dagger、EventBus、xUtils 等分析)
目前包括:
Android 开源项目第一篇——个性化控件(View)篇
包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、FlipView、ColorPickView、GraphView、UI Style、其他
Android 开源项目第二篇——工具库篇
包括依赖注入、图片缓存、网络请求、数据库 ORM 工具包、Android 公共库、高版本向低版本兼容库、多媒体、事件总线、传感器、安全、插件化、文件、其他
Android 开源项目第三篇——优秀项目篇
比较有意思的完整的 Android 项目
Android 开源项目第四篇——开发及测试工具篇
包括开发效率工具、开发自测相关、测试工具、开发及编译环境、其他
Android 开源项目第五篇——优秀个人和团体篇
乐于分享并且有一些很不错的开源项目的个人和组织,包括 JakeWharton、Chris Banes、Koushik Dutta 等大牛
详细原文在github上面可以找到: https://github.com/Trinea/android-open-project#%E7%AC%AC%E5%9B%9B%E9%83%A8%E5%88%86-%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7 收起阅读 »
Android 开源项目第一篇——个性化控件(View)篇
包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、ScrollView、TimeView、TipView、FlipView、ColorPickView、GraphView、UI Style、其他
Android 开源项目第二篇——工具库篇
包括依赖注入、图片缓存、网络请求、数据库 ORM 工具包、Android 公共库、高版本向低版本兼容库、多媒体、事件总线、传感器、安全、插件化、文件、其他
Android 开源项目第三篇——优秀项目篇
比较有意思的完整的 Android 项目
Android 开源项目第四篇——开发及测试工具篇
包括开发效率工具、开发自测相关、测试工具、开发及编译环境、其他
Android 开源项目第五篇——优秀个人和团体篇
乐于分享并且有一些很不错的开源项目的个人和组织,包括 JakeWharton、Chris Banes、Koushik Dutta 等大牛
详细原文在github上面可以找到: https://github.com/Trinea/android-open-project#%E7%AC%AC%E5%9B%9B%E9%83%A8%E5%88%86-%E5%BC%80%E5%8F%91%E5%B7%A5%E5%85%B7%E5%8F%8A%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7 收起阅读 »
Android 开发工具之Codota——搜索最好的Android 代码
Find Great Code Examples Our crawler extracts coding patterns from a vast number of code projects. Search here for the best code examples from over 7 million sources
上面是Codota 官方介绍的最好的代码实例,我们的抓取工具从大量的代码项目中抓取了大量的代码模式, 你可以从这里搜索超过七百万精品代码实例;Codota 的特性
的确,正如codota 官方所说,的确是精品,他的搜索源,不仅只有Github,而且还有知名博客和开发者网站,让你搜索一个东西,不用在找上半天;
除了搜索功能,首页的下方还罗列比较流行的类库,还提供保存代码的CodeBox,同时还提供了Chrome 插件和Android Studio 插件,最后通过Google,Github,Facebook 任意一个授权登录即可使用;
而且当你点击搜索的结果(Java class)的时候,右侧会显示UML 视图,而且左边的代码如果点击会有高亮现实,而且还会显示Doc,并提供了API Doc 的链接。
收起阅读 »
新增“帮助中心”
我们整理了一些已经解决的问题,做成了“帮助中心”,http://www.imgeek.org/help/
方便大家查询,及时获得答案
方便大家查询,及时获得答案
【视频】普及下环信即时通讯云
播放地址:http://yuntv.letv.com/bcloud.swf?uu=b133c59dd0&vu=1a538fb53a&pu=adfb3ced5e&auto_play=1&gpcflag=1&lang=zh_CN
ios推送字符长度有没有限制?
跟普通消息一样,30kb以内。另外,自定义的字段可以全部显示。
Web端怎么发送消息的?
老版本web端是靠http轮循发送消息的,也就说在一定时间向服务器发送http请求,服务器也在一定时间内发送消息到浏览器。这个时间是可以设置的。在新版本里面加了websocket 长连接,是支持 https 的。
环信的表情可以换成自己的吗?
可以更换,环信SDK提供的是一个聊天通道,demo提供的只是一个模板,ui方面的东西完全可以按照自己的要求来处理
demo是使用映射,具体可以参考下demo的 SmileUtils 类
demo是使用映射,具体可以参考下demo的 SmileUtils 类
logininfo有时候为空,是怎么回事?
没有登陆或者登录不成功。
显示时间能不能设置成间隔10分钟显示一次 ?
可以的,这个完全是在UI上来显示,可以按照自己设定时间来显示
环信sdk用到的那个位置定位有偏差吧?
sdk只是传递上层的经纬坐标,定位精度是相应的地图软件决定的。
聊天的内容储存在哪,用户是否能够保存和备份?
聊天的内容存储在环信的服务器上,同时用户本地也会保存一份,是SDK自动存储的。
一个客服系统,是否可以建立多个关联,是否可以关联不同的AppKey的关联?
一个客服系统下可以建立多个关联,也可以关联不同的appkey的IM用户。 详细查看 app接入 关联相关 文档 http://docs.easemob.com/doku.php?id=cs:300visitoraccess:10nativeapp
客服的接入人数有什么用?
接待人数是指系统给客户自动分配会话的最大人数,超过此人数以后,系统不再给客服分配会话。
用户后台关联的时候总是未启动,用户名和密码是没问题的,该如何处理?
检查下clientid,appkey,clientsecret这三个参数前后是否有空格,检查下用户名密码和appkey,clientId,secret是否有错误,先测试下这两种情况,再有其他原因就需要看后台日志了。
web端的那个表情文件在哪里?[(;] 后面 有一个value 那个value 代表的是 二进制流还是 图片路径 ?
使用的是base64编码,在http://webim.easemob.com/jquery-1.11.1.js var emotionPicData 。
管理后台当前登录账号禁止操作是什么情况?
只有一个管理员,不能移除,org下如果不止一个管理员,当前登陆的管理员可以移除另外一个管理员,但是不能移除自己。
环信的实时消息旁路接口是什么?
消息实时回调。环信server会把消息主动回调给用户的服务器。
发送消息的时候,没有网络,环信会不会像QQ那样有个自己去持续请求的时间呢?
环信有提供持续请求时间,如果过了设定的时间,才会返回发送失败的回调
到了收费临界点会不会通知?
会的。
[[EaseMob sharedInstance].chatManager setIsAutoLoginEnabled:YES]; 这个应该写到哪里呢?
只有您登录成功后设置这个才会生效,否则都不会有效,所以建议您在登录成功后设置。
为什么用户名密码在demo上登录成功的,但是在自己app上登录就说用户名和密码错误呢?
检查是否 是在自己appkey下注册的账号,不同的appkey下注册的账号是分离开的,不互通
环信的表情可以换成app的吗?
可以,目前SDK中使用的表情都是字符串匹配得来的。在消息传递过程中,发的就是字符串,当客户端需要展示的时候,转换成对应的图片即可。
环信有什么技术上的优势和特点?
1、高并发下的可靠性,稳定性:环信是国内第一家即时通讯云平台,也是国内最大的即时通讯云平台。截至2014年12月已通过SDK达到1亿注册ID用户的覆盖率。这些注册ID用户是通过13763+家APP在使用环信集成的IM功能。过千万用户的超级APP就有十多家。典型用户包括海豚浏览器(一个亿用户),蜻蜓fm(数千万用户),汽车之家-车友会(数千万用户),节操精选(500万用户),看动漫(数百万用户),哈图(200万用户),熊猫公交(200万用户)等。所以环信平台的可靠性,稳定性是经受了千万级真实用户的实践考验的。2、开放性:环信的几位创始人都是重度的开源软件参与者。几位创始人作为commiiter(核心开发者)身份参与过的开源软件就有10几个,包括大家都比较熟 悉的Hibernate, JBoss jBPM, Apache CXF, Eclipse STP, Gradle等。创始人的基因决定了公司的文化。环信的目标一直是做一款真正“开发者为开发者打造的软件”,一款最开放的即时通讯平台。这 也是为什么环信开源了所有的应用和UI层面的源代码,包括单聊,群聊页面,通讯录页面,通话历史记录页面。环信以后还会开源更多,比如阅后即焚,比如公共账号,比如录音变音。环信会以身作则,带头来做开源。环信的长期目标是和开发者一起打造最开放的开源社交技术社区,大家可以一起在社区里分享自己做过的各种社交模块,模板乃至成品应用。只有这样,才能真正降低开发者做社交的成本。3、专注:这个行业里有的公司既做IVR,呼叫中心,也做短信接入,voip。IM 只是他们产品线的一个部分。而环信就只做一个IM,别的什么都不做。即使这样,环信也觉得把IM这一件事做好做深做透,本身就是一件很不容易的事了。以后还有很多的工作要做。现在的第三方开发者服务市场,经过推送,云存储,统计分析等产品的培育,开发者们也都变得越来越成熟起来。他们在选择一个第三方开发 者服务时,他们知道要选择一个在这个领域做得最好最精的服务,而不是去选择一个一站式服务厂商。环信给所有开发者的承诺就是环信只做IM ,是这个领域的No.1 收起阅读 »
语音导出来是什么格式的?
amr 格式
关于所谓”XcodeGhost”的澄清
源于XcodeGhost作者的github, https://github.com/XcodeGhostSource/XcodeGhost
"XcodeGhost" Source 关于所谓”XcodeGhost”的澄清
首先,我为XcodeGhost事件给大家带来的困惑致歉。XcodeGhost源于我自己的实验,没有任何威胁性行为,详情见源代码:https://github.com/XcodeGhostSource/XcodeGhost
所谓的XcodeGhost实际是苦逼iOS开发者的一次意外发现:修改Xcode编译配置文本可以加载指定的代码文件,于是我写下上述附件中的代码去尝试,并上传到自己的网盘中。
在代码中获取的全部数据实际为基本的app信息:应用名、应用版本号、系统版本号、语言、国家名、开发者符号、app安装时间、设备名称、设备类型。除此之外,没有获取任何其他数据。需要郑重说明的是:出于私心,我在代码加入了广告功能,希望将来可以推广自己的应用(有心人可以比对附件源代码做校验)。但实际上,从开始到最终关闭服务器,我并未使用过广告功能。而在10天前,我已主动关闭服务器,并删除所有数据,更不会对任何人有任何影响。
愿谣言止于真相,所谓的"XcodeGhost",以前是一次错误的实验,以后只是彻底死亡的代码而已。
需要强调的是,XcodeGhost不会影响任何App的使用,更不会获取隐私数据,仅仅是一段已经死亡的代码。
再次真诚的致歉,愿大家周末愉快 收起阅读 »
"XcodeGhost" Source 关于所谓”XcodeGhost”的澄清
首先,我为XcodeGhost事件给大家带来的困惑致歉。XcodeGhost源于我自己的实验,没有任何威胁性行为,详情见源代码:https://github.com/XcodeGhostSource/XcodeGhost
所谓的XcodeGhost实际是苦逼iOS开发者的一次意外发现:修改Xcode编译配置文本可以加载指定的代码文件,于是我写下上述附件中的代码去尝试,并上传到自己的网盘中。
在代码中获取的全部数据实际为基本的app信息:应用名、应用版本号、系统版本号、语言、国家名、开发者符号、app安装时间、设备名称、设备类型。除此之外,没有获取任何其他数据。需要郑重说明的是:出于私心,我在代码加入了广告功能,希望将来可以推广自己的应用(有心人可以比对附件源代码做校验)。但实际上,从开始到最终关闭服务器,我并未使用过广告功能。而在10天前,我已主动关闭服务器,并删除所有数据,更不会对任何人有任何影响。
愿谣言止于真相,所谓的"XcodeGhost",以前是一次错误的实验,以后只是彻底死亡的代码而已。
需要强调的是,XcodeGhost不会影响任何App的使用,更不会获取隐私数据,仅仅是一段已经死亡的代码。
再次真诚的致歉,愿大家周末愉快 收起阅读 »
苹果清除感染 XCodeGhost 的应用
苹果周日称它正从其应用商店内移除感染XcodeGhost的应用。恶意代码XcodeGhost通过第三方下载的Xcode编译器嵌入到了数百款合法应用中,其中包括流行的中国应用如微信和嘀嘀打车。在这之前,App Store只发现过5款恶意应用。苹果发言人 Christine Monaghan表示,他们正在与开发者合作确保他们使用官方版本的Xcode 去构建他们的应用。安全公司的研究人员担心其他人可能会模仿XcodeGhost的做法。苹果没有透露究竟有多少应用被发现感染了XcodeGhost。 iOS开发者从百度云盘等第三方下载Xcode的一个原因被认为是官网的下载速度太慢,而影响官网下载速度的因素除了CDN外就是防火长城和出口流量控制了。
源自solidot.org 收起阅读 »
源自solidot.org 收起阅读 »
要发透传信息,是不是先要把推送证书配置好 ?
透传消息的特点是不会发送apns和存db,所以您使用透传时不需要设置证书也可以使用。
回调接口的返回值都是固定格式,callId,accept,reason,security,怎么会报返回值过长的错误呢?
一般返回值过长是因为用户的回调接口出问题了,比如出现了错误页面,环信这边得到了一个错误页面,就会超长。