Skip to content

Commit c4d0d39

Browse files
committed
Update README.md
1 parent 2a16539 commit c4d0d39

File tree

1 file changed

+135
-2
lines changed

1 file changed

+135
-2
lines changed

README.md

Lines changed: 135 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,138 @@
11
# jmessage-react-plugin
22

3-
####这是一个使用JMessage-sdk的React Native Android JChat Demo应用
3+
##Android
44

5-
###用法
5+
####这是一个使用JMessage-sdk的混合的React Native应用,在本项目中使用了[Redux架构](http://camsong.github.io/redux-in-chinese/)来管理状态。
6+
7+
####Android用法
8+
- 下载并解压这个项目的zip
9+
- 在初始化好的React项目中将app文件夹替换为你刚刚解压的app文件夹(jmessage-react-plugin-master/android/app)(如果你还没有初始化,[参考这个](https://facebook.github.io/react-native/docs/getting-started.html#content)
10+
- 修改android文件夹下的build.gradle将dependencies下的classpath修改为你当前Android Studio所用的版本
11+
- 修改app文件夹下的build.gradle,将compile "com.facebook.react:react-native:0.23.0"修改为你当前的版本
12+
- 在AndroidManifest中更改PackageName和build.gradle中的applicationId为你自己的包名
13+
- 在AndroidManifest中将appKey替换为你在极光推送控制台注册的应用的appKey,如果没有,可以[前往注册](https://www.jpush.cn/)
14+
- 运行app
15+
16+
关于jmessage-sdk的相关接口说明可以参考:
17+
#####[极光IM Android SDK概述](http://docs.jpush.io/client/im_sdk_android/)
18+
19+
#####[IM Android SDK Java docs](http://docs.jpush.io/client/im_android_api_docs/)
20+
21+
####jmessage-react-plugin Android的项目结构说明
22+
#####JS部分
23+
除了入口index.android.js之外,都放在react-native-android文件夹下
24+
- actions 充当调用jmessage-sdk动作的发起者,action可以再抽象出一个中间件,但本项目中没有这样做
25+
- containers 所有Component的集合,负责界面的更新与发起actions
26+
- reducers 根据一个action返回一个新的state,负责state的更新
27+
- store 绑定actions和reducers
28+
29+
#####Native部分
30+
- entity 根据需求抽象出的一些实体类,主要是为了使用Gson转换为json字符串传到JS(如果是纯React Native应用,则不需要如此,直接请求服务端即可)
31+
- tools 主要是一些工具类
32+
- 其他 包括Native入口类以及NativeModule等
33+
34+
####接口调用
35+
#####在JS中调用jmessage-sdk的接口
36+
> actions/conversationActions.js
37+
38+
```
39+
export function loadConversations() {
40+
return dispatch => {
41+
type: types.INITIAL_CONVERSATION_LIST,
42+
JMessageHelper.getConvList((result) => {
43+
dispatch({
44+
type: types.LOAD_CONVERSATIONS,
45+
convList: JSON.parse(result),
46+
});
47+
}, () => {
48+
dispatch({
49+
type: types.LOAD_ERROR,
50+
convList: []
51+
})
52+
});
53+
}
54+
}
55+
```
56+
57+
这个action实际上通过JMessageHelper这个NativeModule调用了getConvList()这个方法:
58+
> JMessageHelper.java
59+
60+
```
61+
/**
62+
* JS端调用的获取所有会话的方法
63+
* @param successCallback 回调返回一个Map对象
64+
*/
65+
@ReactMethod
66+
public void getConvList(Callback successCallback, Callback errorCallback) {
67+
mContext = getCurrentActivity();
68+
List<Conversation> data = JMessageClient.getConversationList();
69+
//对会话列表进行时间排序
70+
if (data != null) {
71+
if (data.size() > 1) {
72+
SortConvList sortList = new SortConvList();
73+
Collections.sort(data, sortList);
74+
}
75+
//模拟将从服务器端返回的数据解析为JSON字符串传到JS端
76+
//如果是纯React应用应该在JS端直接fetch服务端的数据,由于目前使用的是jmessage-sdk,所以采用这种方法
77+
ConversationToJSON convToJSON = new ConversationToJSON(mContext, data);
78+
String result = convToJSON.getResult();
79+
Log.i(TAG,"Result: " + result);
80+
successCallback.invoke(result);
81+
} else {
82+
errorCallback.invoke();
83+
}
84+
}
85+
```
86+
87+
在Native里就可以直接调用jmessage-sdk的接口了,然后将得到的数据通过CallBack传递到JS。其他的接口调用也基本上类似。
88+
89+
##关于升级React Native
90+
**进入当前项目的目录**
91+
- 在命令行中使用:
92+
93+
> react-native --version
94+
95+
就可以查看当前使用的版本
96+
97+
- 在命令行中输入:
98+
99+
> npm info react-native
100+
101+
就可以查看React Native的历史和最新版本
102+
103+
- React Native可以直接更新到某个版本:
104+
105+
> npm install --save [email protected]
106+
107+
就可以更新到0.23.0版本
108+
109+
如果升级后出现类似于
110+
```
111+
[email protected] requires a peer of react@^0.14.5 but none was installed.
112+
```
113+
114+
执行:
115+
> npm install --save react
116+
117+
或者:
118+
> npm install --save [email protected]
119+
120+
即可。
121+
122+
如果更新后执行react-native run-android不能正确运行,而是出现类似:
123+
```
124+
Could not find com.facebook.react:react-native:0.23.0.
125+
```
126+
127+
错误,或者在Android Studio中直接运行app时报错:
128+
```
129+
Android Studio failed to resolve com.facebook.react:react-native:0.23.0
130+
```
131+
132+
那么可以按照下列命令修复,首先在命令行中执行:
133+
> npm i
134+
135+
执行完毕且不报错后,执行下面的命令,**注意,在执行命令之后,某些文件可能会产生冲突,请确保你的本地文件记录可以恢复**(在Android Studio中可以查看历史记录来恢复文件)
136+
> react-native upgrade
137+
138+
执行上面的命令可能会提示你是否覆盖文件。在解决冲突之后重新运行App即可。

0 commit comments

Comments
 (0)