Android 集成融云IM(一) 前提准备和获取Token

一、首先,进入融云官网www.rongcloud.cn,注册一个账号,这个不用说,你们就懂的。

二、进入控制台,新建一个项目,这个不详细讲,可以看一下他们的api,重点是代码部分。


Android 集成融云IM(一) 前提准备和获取Token_第1张图片
 

 

进入新建的应用“简聊”

 

Android 集成融云IM(一) 前提准备和获取Token_第2张图片
 
 这样就可以查看APPKey 何APP Secret 其它暂时可以不用看,我们本次的目标只是实现项目的搭建,及获取token,连聊天的界面都不会有的。

 


Android 集成融云IM(一) 前提准备和获取Token_第3张图片
 

 

下载融云的IMKit 包含聊天UI和聊天核心控件

导入到eclipse 并使工程依赖他



Android 集成融云IM(一) 前提准备和获取Token_第4张图片
 
 

接下来,主要配置好AndroidManifest.xml

 

 



    

    
    
    
    
    
    
    
    
    

    
    
    
    
    
    
    
    
    
    

    
        
        
        
            
                

                
            
        

        
        
        
        

        
        
        

        
         
        

        
         
            
            
                
            
            
            
                
            
            
            
                
            
            
                
                
                
            
        

        
        
        

        
        

        
        
        

    

 然后自己继承一个Application ,在里面实现初始化

package com.chat.simplechat;

import org.xutils.x;

import io.rong.imkit.RongIM;
import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.widget.Toast;

public class SCApplication extends Application {

	private static Context content;

	@Override
	public void onCreate() {
		super.onCreate();
		x.Ext.init(this);
		content = getApplicationContext();
		/**
		 * OnCreate 会被多个进程重入,这段保护代码,确保只有您需要使用 RongIM 的进程和 Push 进程执行了 init。
		 * io.rong.push 为融云 push 进程名称,不可修改。
		 */
		if (getApplicationInfo().packageName
				.equals(getCurProcessName(getApplicationContext()))
				|| "io.rong.push"
						.equals(getCurProcessName(getApplicationContext()))) {

			/**
			 * IMKit SDK调用第一步 初始化
			 */
			RongIM.init(this);
		}
	}

	public static Context getObjectContext() {
		return content;
	}

	/**
	 * 获得当前进程的名字
	 * 
	 * @param context
	 * @return 进程号
	 */
	public static String getCurProcessName(Context context) {

		int pid = android.os.Process.myPid();

		ActivityManager activityManager = (ActivityManager) context
				.getSystemService(Context.ACTIVITY_SERVICE);

		for (ActivityManager.RunningAppProcessInfo appProcess : activityManager
				.getRunningAppProcesses()) {

			if (appProcess.pid == pid) {
				return appProcess.processName;
			}
		}
		return null;
	}
}

 然后记得把继承的APPlication的名字配置到AndroidManifest.xml。

 
Android 集成融云IM(一) 前提准备和获取Token_第5张图片
 

到目前,我们已经把项目搭建好了,那么还有很重要的就是获取Token和连接服务器,只把核心代码贴出来,会把源码放在最后,可以下载查看详细代码。

	public static RequestParams addHeader(RequestParams params) {
		Random r = new Random();
		String Nonce = (r.nextInt(10000) + 10000) + "";
		String Timestamp = (System.currentTimeMillis() / 1000) + "";
		params.addHeader("App-Key", RY_APP_KEY);
		params.addHeader("Nonce", Nonce);
		params.addHeader("Timestamp", Timestamp);
		params.addHeader("Signature",
				MD5.encryptToSHA(RY_APP_SECRET + Nonce + Timestamp));

		return params;
	}

 

public static void getToken(final String id, final String username) {
		RequestParams params = new RequestParams(
				"https://api.cn.ronghub.com/user/getToken.json");
		addHeader(params);
		params.addBodyParameter("userId", id);
		params.addBodyParameter("name", username);
		x.http().post(params, new CommonCallback() {

			@Override
			public void onCancelled(CancelledException arg0) {
			}

			@Override
			public void onError(Throwable arg0, boolean arg1) {
				EBmessage eb = new EBmessage();
				eb.setStatus(false);
				eb.setMessage(arg0.toString());
				eb.setFrom("getToken");
				EventBus.getDefault().post(eb);
			}

			@Override
			public void onFinished() {
			}

			@Override
			public void onSuccess(String s) {
				TokenMod mod = new Gson().fromJson(s, TokenMod.class);
				Editor editor = getEditor();
				editor.putString("username", username);
				editor.putString("userpass", mod.getUserId());
				editor.putString("token", mod.getToken());
				editor.commit();

				EBmessage eb = new EBmessage();
				eb.setStatus(true);
				eb.setMessage(mod.getToken());
				eb.setFrom("getToken");
				EventBus.getDefault().post(eb);
			}
		});
	}

	/**
	 * 建立与融云服务器的连接
	 * 
	 * @param token
	 */
	public static void connect(String token, Context context) {

		if (context.getApplicationInfo().packageName.equals(SCApplication
				.getCurProcessName(context.getApplicationContext()))) {

			/**
			 * IMKit SDK调用第二步,建立与服务器的连接
			 */
			RongIM.connect(token, new RongIMClient.ConnectCallback() {

				/**
				 * Token 错误,在线上环境下主要是因为 Token 已经过期,您需要向 App Server 重新请求一个新的
				 * Token
				 */
				@Override
				public void onTokenIncorrect() {
					Log.d("LoginActivity", "--onTokenIncorrect");
				}

				/**
				 * 连接融云成功
				 * 
				 * @param userid
				 *            当前 token
				 */
				@Override
				public void onSuccess(String userid) {
					EBmessage eb = new EBmessage();
					eb.setStatus(true);
					eb.setMessage("success");
					eb.setFrom("connect");
					EventBus.getDefault().post(eb);
					Log.d("LoginActivity", "--onSuccess" + userid);
				}

				/**
				 * 连接融云失败
				 * 
				 * @param errorCode
				 *            错误码,可到官网 查看错误码对应的注释
				 */
				@Override
				public void onError(RongIMClient.ErrorCode errorCode) {
					Log.d("LoginActivity", "--onError" + errorCode);
				}
			});
		}
	}

 

demo下载地址http://download.csdn.net/detail/wangyang00700/9623568

你可能感兴趣的:(Android)