1.IM通讯云提供了用户资料的托管,只需要调用简单的接口就可以实现用户资料的获取和更改,
2.当然也可以进行用户的自定义字段
3.我们一般是按照用户进行资料进行获取字段,TIMManager 的initFriendShipSettings方法获取的资料字段,方便灵活的进行资料的获取,
- public void initFriendshipSettings(long flags,@Nullable List<String> customFields)
flags:系统默认的字段 比如:昵称,头像url
customFields:自定义的字段,可以为null
- List<String> customInfos = new ArrayList<String>();
- customInfos.add(CustomProfile.CUSTOM_GET);
- customInfos.add(CustomProfile.CUSTOM_SEND);
- customInfos.add(CustomProfile.CUSTOM_LEVEL);
- customInfos.add(CustomProfile.CUSTOM_RENZHENG);
- TIMManager.getInstance().initFriendshipSettings(CustomProfile.allBaseInfo, customInfos);
当然这都是在我们的applocation中获取的,当我们登录成功的时候就需要获取我们用户的资料,
4.获取用户的资料
- public void getSelfProfile(TIMValueCallBack<TIMUserProfile> cb)
- TIMFriendshipManager.getInstance().getSelfProfile(new TIMValueCallBack<TIMUserProfile>() {
- @Override
- public void onError(int i, String s) {
- Toast.makeText(LoginActivity.this, "获取信息失败:" + s, Toast.LENGTH_SHORT).show();
- }
- @Override
- public void onSuccess(TIMUserProfile timUserProfile) {
- //获取自己信息成功
- BearApplication.getApplication().setSelfProfile(timUserProfile);
- }
- });
- /**
- * 获取用户的identifier
- * @return 用户的identifier
- */
- public String getIdentifier()
- /**
- * 获取用户的昵称
- * @return 用户的昵称
- */
- public String getNickName()
- /**
- * 获取用户头像URL
- * @return 用户头像URL
- */
- public String getFaceUrl()
- /**
- * 获取用户个人签名
- * @return 用户个人签名
- */
- public String getSelfSignature()
- /**
- * 获取用户加好友的选项
- * @return 用户好友选项
- */
- public TIMFriendAllowType getAllowType()
- /**
- * 获取用户备注
- * @return 用户备注
- */
- public String getRemark()
- /**
- * 获取被加入的好友分组列表
- * @return 分组列表
- */
- public List<String> getFriendGroups()
- /**
- * 获取用户自定义信息
- * @return 自定义信息Map
- */
- public Map<String, byte[]> getCustomInfo()
- /**
- * 获取用户性别类型
- * @return 用户性别类型
- */
- public TIMFriendGenderType getGender()
- /**
- * 获取用户生日信息
- * @return 生日信息
- */
- public long getBirthday()
- /**
- * 获取语言
- * @return 语言
- */
- public long getLanguage()
- /**
- * 获取位置信息
- * @return 位置信息
- */
- public String getLocation()
- public void setNickName(@NonNull String var1, TIMCallBack var2)
二。头像的选择
1.还是先上图
- Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
- tempUri = Uri.fromFile(new File(Environment
- .getExternalStorageDirectory(), "image.jpg"));
- // 指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
- openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
- startActivityForResult(openCameraIntent, TAKE_PICTURE);
- Intent openAlbumIntent = new Intent(
- Intent.ACTION_GET_CONTENT);
- openAlbumIntent.setType("image/*");
- startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- if (resultCode == RESULT_OK) { // 如果返回码是可以用的
- switch (requestCode) {
- case 相机的:
- startPhotoZoom(tempUri); // 开始对图片进行裁剪处理
- break;
- case 相册的:
- startPhotoZoom(data.getData()); // 开始对图片进行裁剪处理
- break;
- case 统一裁剪完的图片:
- if (data != null) {
- setImageToView(data); // 让刚才选择裁剪得到的图片显示在界面上
- }
- break;
- }
- }
- }
- protected void startPhotoZoom(Uri uri) {
- if (uri == null) {
- Log.i("tag", "The uri is not exist.");
- }
- tempUri = uri;
- Intent intent = new Intent("com.android.camera.action.CROP");
- intent.setDataAndType(uri, "image/*");
- // 设置裁剪
- intent.putExtra("crop", "true");
- // aspectX aspectY 是宽高的比例
- intent.putExtra("aspectX", 1);
- intent.putExtra("aspectY", 1);
- // outputX outputY 是裁剪图片宽高
- intent.putExtra("outputX", 150);
- intent.putExtra("outputY", 150);
- intent.putExtra("return-data", true);
- startActivityForResult(intent, CROP_SMALL_PICTURE);
- }
- setImageToView的处理就是进行图片的保存并上传到服务器
那么这个功能如何在android中实现呢?很可惜的是在android中并没有直接提供类似session或cookie的东西,这个时候就是通过Token来完成。Token的存在更像是一个令牌,比如说当我们需要实现具有用户权限的操作时,每一次操作都需要向服务器发送请求,让服务器完成在数据库中进行用户名和密码,这些显然对于服务器的性能是很不利的。当然有人也会说我们可以在一次请求成功后将类似于user_id的东西保存在本地,以后每次请求的时候用user_id进行操作,这样不是就降低了服务器的负担,但是这样的话存在一个问题,就是user_id一旦存储在本地的时候,不是太有可能会自动回收掉,这样一来的话就会导致一个问题,就是app无论何时打开都是验证通过的状态,这样一来安全性降低。而Token就是解决这样一个问题的东西:
以上这些话总结一下就是token的定义:
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
我是用的七牛云进行的头像的上传,我们从服务器上获取我们的token,然后进行头像的上传即可,当然上传这个我放到网路请求的框架这一节来进行详细的讲解