`
汪洋00700
  • 浏览: 23613 次
  • 性别: Icon_minigender_1
  • 来自: 常德
社区版块
存档分类

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

 
阅读更多

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

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



 

 

进入新建的应用“简聊”

 


 
 这样就可以查看APPKey 何APP Secret 其它暂时可以不用看,我们本次的目标只是实现项目的搭建,及获取token,连聊天的界面都不会有的。

 



 

 

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

导入到eclipse 并使工程依赖他




 
 

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

 

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.chat.simplechat"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="13"
        android:targetSdkVersion="21" />

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取机型信息权限 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 录音 -->

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

    <application
        android:name=".SCApplication"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo.Light" >
        <activity
            android:name="com.chat.simplechat.activity.MainActivity"
            android:label="@string/app_name" >
        </activity>
        <activity
            android:name=".activity.SplashActivity"
            android:label="@string/app_name"
            android:theme="@style/Theme.Start" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- 必选: SDK 核心功能 -->
        <!-- 第三方相关,向第三方推送服务请求 token 的服务 -->
        <service
            android:name="io.rong.push.core.PushRegistrationService"
            android:exported="false" >
        </service>

        <!-- 处理 push 消息相关的服务 -->
        <service
            android:name="io.rong.push.core.MessageHandleService"
            android:exported="true" >
        </service>

        <!-- push服务 -->
        <service
            android:name="io.rong.push.PushService"
            android:exported="false"
            android:process="io.rong.push" > <!-- push进程,可以改名 -->
        </service>

        <!-- push 相关事件接收器 -->
        <receiver
            android:name="io.rong.push.PushReceiver"
            android:process="io.rong.push" > <!-- 此处进程可以改名,名称需要和PushService所在进程统一 -->
            <!-- 心跳事件 -->
            <intent-filter>
                <action android:name="io.rong.push.intent.action.HEART_BEAT" />
            </intent-filter>
            <!-- 网络变动事件 -->
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
            <!-- 部分用户事件 -->
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
            <intent-filter>
                <action android:name="android.intent.action.USER_PRESENT" />
                <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
                <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
            </intent-filter>
        </receiver>

        <!-- 必选: SDK 核心功能 -->
        <!-- imlib config begin -->
        <meta-data
            android:name="RONG_CLOUD_APP_KEY"
            android:value="pkfcgjstfp8j8" />

        <service
            android:name="io.rong.imlib.ipc.RongService"
            android:exported="true"
            android:process=":ipc" />
        <service android:name="io.rong.imlib.ReConnectService" />

        <receiver android:name="io.rong.imlib.ConnectChangeReceiver" />
        <receiver
            android:name="io.rong.imlib.HeartbeatReceiver"
            android:process=":ipc" />
        <!-- imlib config end -->

    </application>

</manifest>

 然后自己继承一个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。

 

 

到目前,我们已经把项目搭建好了,那么还有很重要的就是获取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<String>() {

			@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

  • 大小: 108 KB
  • 大小: 38 KB
  • 大小: 28 KB
  • 大小: 19.5 KB
  • 大小: 5.4 KB
分享到:
评论

相关推荐

    解决:集成沙雕融云IM在Application注册后报token is empty,并崩溃的问题。

    在使用融云IM之前,应用需要先通过融云服务器获取一个Token,这个Token是用户的身份凭证,用于标识和验证应用在融云平台上的合法身份。通常,我们会在应用程序启动时,如`Application`类的`onCreate()`方法中进行...

    uniapp集成融云IM,简单的demo

    本篇文章将详细讲解如何在基于Vue.js框架的uni-app项目中集成融云IM,通过一个简单的demo来阐述具体实现过程。 uni-app是一个使用Vue.js语法的跨端开发框架,它允许开发者编写一次代码,即可运行在iOS、Android、H5...

    融云讨论组群组聊天基本集成

    融云是一款专业的即时通讯(IM)云服务提供商,它为开发者提供了一整套完善的API和SDK,使得在应用中实现群组聊天功能变得简单。在本文中,我们将深入探讨如何在你的应用程序中集成融云讨论组群组聊天的基本功能。 ...

    android融云服务端与客户端Demo

    在Android应用开发中,融云(RongCloud)是一个非常受欢迎的即时通讯(IM)解决方案,它提供了丰富的API和服务,帮助开发者快速实现聊天、群聊、消息推送等功能。本项目"android融云服务端与客户端Demo"是针对融云...

    android 融云demo

    在Android平台上,集成即时通讯(IM)功能是一个常见的需求,为用户提供流畅的聊天体验。"android 融云demo"就是一个实例,展示了如何在Android应用中整合融云(RongCloud)的服务,实现聊天功能。融云是一家专注于...

    融云实现单聊

    4. 消息推送:对于Android,可能需要集成融云提供的推送服务,确保消息能在后台接收。 四、安全与性能优化 1. 数据安全:确保用户的敏感信息如token的安全存储,避免泄露。 2. 性能优化:合理设计消息缓存策略,...

    Android 融云单聊

    在Android平台上,融云单聊是一款为开发者提供即时通讯(IM)服务的SDK,它使得开发者可以轻松地在自己的应用程序中集成聊天功能。这个技术专题将深入探讨如何在Android应用中实现融云单聊功能,包括SDK的集成、用户...

    FunnyChat-IM, 基于Android的即时通讯应用[使用融云SDK].zip

    融云SDK的接入需要设置AppKey和Token,这两个参数是通过融云开发者后台获取的,用于标识应用和用户的身份。此外,开发者还需要处理网络连接和权限请求,确保应用能够在不同网络环境下正常运行。 融云SDK提供了消息...

    融云实时通讯demo

    融云实时通讯Demo是一款专为Android应用程序设计的实时通信解决方案,旨在帮助开发者快速集成聊天、音视频通话等功能。融云作为国内领先的通讯云服务提供商,提供了丰富的API和SDK,使得开发者能够轻松地在自己的...

    融云web+mui

    集成融云Web SDK的过程中,开发者需要对JavaScript和HTTP通信有深入理解,因为融云的API通常通过Ajax请求进行调用。同时,由于涉及到原生功能,可能需要利用WebView或Cordova等技术将Web应用封装为原生APP,以便利用...

    demo-imlib-android-v2,rong imlib sdk 2.0演示。.zip

    融云IMLib SDK是一款专为开发者设计的即时通讯库,它提供了丰富的API接口,方便开发者快速集成到自己的应用程序中,实现聊天、群聊、消息推送等功能。在Android平台上,融云发布了IMLib SDK 2.0版本,此版本对性能...

Global site tag (gtag.js) - Google Analytics