|
1 | 1 | # jmessage-react-plugin |
2 | 2 |
|
3 | | -####这是一个使用JMessage-sdk的React Native Android JChat Demo应用 |
| 3 | +##Android |
4 | 4 |
|
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