Coder Social home page Coder Social logo

jmessage-react-plugin's Introduction

jmessage-react-plugin

极光官方开发的极光 IM react-native 插件,同时支持 文字、图片、语言、文件和自定义消息。同时支持 iOS 和 Android 平台。

ChangeLog

3.1.8

1.需要在AppDelegate.m 中手动添加初始化方法,示例如下

#import <RCTJMessageModule.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{   
   [JMessage setupJMessage:launchOptions
                    appKey:appKey
                   channel:@""
          apsForProduction:isProduction
                  category:nil
            messageRoaming:true];
   
   [JMessage addDelegate:self withConversation:nil];
}

//JMessage 离线消息监听
- (void)onSyncOfflineMessageConversation:(JMSGConversation *)conversation
                         offlineMessages:(NSArray JMSG_GENERIC ( __kindof JMSGMessage *) *)offlineMessages {
  [RCTJMessageEventQueue sharedInstance].offlineConversation = conversation;
  [RCTJMessageEventQueue sharedInstance].offlineMsgArray = offlineMessages;
}

2.js中初始化和监听需要在componentDidMount()componentDidMount()方法内,示例如下

componentDidMount() {
        JMessage.init({
            appkey: appkey,
            channel:channel
            isOpenMessageRoaming: true,
            isProduction: true,
        });
        JMessage.setDebugMode({enable: true});
        //离线消息监听
        JMessage.addSyncOfflineMessageListener((message) => {
            console.log("| JIGUANG |===addSyncOfflineMessageListener====" + JSON.stringify(message))
        });
}        

安装

npm install jmessage-react-plugin --save
npm install jcore-react-native --save(目前 jmessage-react-plugin 2.1.1 版本需要指定安装 jcore-react-native 1.2.1 以上版本)
react-native link
(如果是原生应用集成 react-native)使用 CocoaPods 安装

注意: 如果已经通过 react-native link 链接了插件,则不需要执行下面的步骤。

在 Podfile 中添加如下代码:

pod 'JMessageRN', :path => '../node_modules/jmessage-react-plugin'

终端执行如下指令:

pod install

配置

Android

  • 配置 AndroidManifest,加入 meta-data 部分
...
<meta-data android:name="JPUSH_CHANNEL" android:value="${APP_CHANNEL}" />
<meta-data android:name="JPUSH_APPKEY" android:value="${JPUSH_APPKEY}" />
...
  • 配置 build.gradle,将下列配置部分替换成自己的。
defaultConfig {
        applicationId "你的 application id"
        minSdkVersion 16
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
        manifestPlaceholders = [
                JPUSH_APPKEY: "你的 appKey",	//在此替换你的APPKey
                APP_CHANNEL: "developer-default"		//应用渠道号
        ]
    }

在 MainApplication 中加上 JMessagePackage 即可,JMessagePackage 有一个参数,设置是否弹出 toast。

// 如果设置为 true,则不弹出 toast。
private boolean shutdownToast = false;

@Override
protected List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
            new MainReactPackage(),
            new JMessageReactPackage(shutdownToast),
    );
}

iOS

  • 打开工程,进入 Build Settings -> Framework search paths 添加 framework 搜索路径

    $(SRCROOT)/../node_modules/jmessage-react-plugin/ios/RCTJMessageModule
    
  • 打开工程,进入 Build Settings -> Other Link Flag 添加一行编译选项

    -framework "JMessage"
    

API

API doc

更多

jmessage-react-plugin's People

Contributors

dogbutcat avatar fomenyesu avatar huangminlinux avatar joshlipan avatar kenchoi1992 avatar lixiaohang000 avatar weiruiyang avatar yukirin000 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jmessage-react-plugin's Issues

获取会话之后获取用户头像问题

环境:
"react-native": "^0.53.3",
"jmessage-react-plugin": "^2.4.0",
在进入APP ,我获取当前会话列表并展示出来,然后通过react-native-fs来读取图片路径并且转换成为bse64 编码并且展示出来,结果出现下面的头像找不到的问题。但是只要给对方发送一条消息之后即可正常显示。

image

运行example报错

启动运行example报错
Activity class {com.sample.application/com.sample.application.MainActivity} does not exist.
image

Could not invoke JMessageModule.setup null 集成出现的问题

// js
"jcore-react-native": "^1.2.6",
"jmessage-react-plugin": "^2.3.6",
"react": "16.2.0",
"react-native": "0.52.2",

// android
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
    applicationId "com.xxxxxxxx"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 2
    versionName "2.2"
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
    multiDexEnabled true
    manifestPlaceholders = [
            JPUSH_APPKEY: "",	//在此替换你的APPKey
            APP_CHANNEL: "developer-default"		//应用渠道号
    ]
}

Something Error : JMessage init()

TypeError:Cannot read property 'setup' of undefined This error is loacted at: in App (at renderApplication.js:35) in RCTView (at View.js:113) in View (at AppContainer.js:102) in RCTView (at View.js:113) in View (at AppContainer.js:126) in AppContainer (at renderApplication.js:34)

let params = { 'appkey': "***", 'isOpenMessageRoaming': false, 'isProduction': false, 'channel': "" }; JMessage.init(params); JMessage.getMyInfo((myInfo) => { console.log('myInfo:',myInfo); })

JMSGPushError:request timeout

{ description: 'Error Domain=jmsg_error Code=6002 "JMSGPushError:request timeout" UserInfo={NSLocalizedDescription=JMSGPushError:request timeout}',

iPhone真机调用jmessage的登录方法请求超时,用模拟器就没问题,为啥?

RCTJMessageModule.m:downloadVoiceFile 1659行 错误

1659行:
failCallback(@[@{@"messageId": message.msgId,
@"filePath": [mediaContent originMediaLocalPath]}]);
应改为:
successCallback(@[@{@"messageId": message.msgId,
@"filePath": [mediaContent originMediaLocalPath]}]);

getHistoryMessage 和 onReceiveMessage问题

"react": "^16.4.0",
"react-native": "^0.55.4",
"jmessage-react-plugin": "^2.3.7",
"aurora-imui-react-native": "^0.10.8"

前提:使用createJMessage创建消息,sendJMessage发送消息
问题1:当发送视频文件(type: 'file'),发送过程没有问题,但接收的时候message里fileName: null, path: null
问题2:A用a手机给B的b手机发送了消息,包括文字、视频、音频、图片,视频问题如问题1。当A,B互换手机登录自己的账号(isOpenMessageRoaming: true),这时用getHistoryMessage获取的历史消息中,视频、图片的path为空或没有path字段,音频有时也会这样。文字消息没有问题。

downloadVoiceFile返回错误的参数

Description

下载音频中判断消息类型的时候错误,判断目标消息类型为image,但实际应该为voice导致无法下载。。。

public void downloadVoiceFile(ReadableMap map, final Callback success, final Callback fail) {
try {
Conversation conversation = mJMessageUtils.getConversation(map);
if (null == conversation) {
mJMessageUtils.handleError(fail, ERR_CODE_CONVERSATION, ERR_MSG_CONVERSATION);
return;
}
final String messageId = map.getString(Constant.MESSAGE_ID);
Message msg = conversation.getMessage(Integer.parseInt(messageId));
if (null == msg) {
mJMessageUtils.handleError(fail, ERR_CODE_MESSAGE, ERR_MSG_MESSAGE);
return;
}
if (msg.getContentType() != ContentType.image) {
mJMessageUtils.handleError(fail, ERR_CODE_MESSAGE, "Wrong message type");
return;
}
VoiceContent content = (VoiceContent) msg.getContent();

系统消息对象返回js为[null]

Environment

package: [email protected]
platform: android

Description

在控制台新建群组并添加成员后,调用拉取历史消息APIJMessage.getHistoryMessages时,返回数据体Message为[null],实际上应是eventType为group_member_added的object,查看源码发现在如下case中

case eventNotification:
result.putString(Constant.TYPE, "event");
List usernameList = ((EventNotificationContent) content).getUserNames();
result.putArray(Constant.USERNAMES, toJSArray(usernameList));
switch (((EventNotificationContent) content).getEventNotificationType()) {
case group_member_added:
//群成员加群事件
result.putString(Constant.EVENT_TYPE, "group_member_added");
break;
case group_member_removed:
//群成员被踢事件
result.putString(Constant.EVENT_TYPE, "group_member_removed");
break;
case group_member_exit:
//群成员退群事件
result.putString(Constant.EVENT_TYPE, "group_member_exit");
break;
case group_info_updated:
result.putString(Constant.EVENT_TYPE, "group_info_updated");
break;
}
default:
return null;
}

执行之后并没有break,结果直接跳转default并且返回了null而非result,导致js获取数据为[null]出错。不知是否为bug

Expectation

系统消息正常返回

android

Error:(514, 36) 错误: 找不到符号
符号: 变量 IS_DESCEND
位置: 类 Constant

在Constant 里面没找到定义的IS_DESCEND这个

根据源码中的example在开发过程中遇到的几个问题

您好,我在项目中根据example源码进行了开发调试,其中遇到了几个问题:

环境配置如下:

"react-native": "0.47.1",
"aurora-imui-react-native": "^0.4.21",
"jcore-react-native": "^1.1.8",
"jmessage-react-plugin": "^2.1.0",
"jpush-react-native": "^2.0.7"

1. 头像路径问题

(1)android studio emulator 环境
通过react-native-image-picker组件上传图片,返回路径及调用updateMyAvatar接口参数格式为 "/storage/emulated/0/Android/data/com.miningapp.debug/files/Pictures/image-3268b271-76dd-44bf-8f16-cc22d3338d31.jpg",上传成功后
调用getMyInfo 返回路径(avatarThumbPath)为
"/data/user/0/com.miningapp.debug/files/images/small-avatar/C9546535D771E93207E22613DBE56A50"
aurora-imui-react-native插件的MessageList里可以正常显示头像,但是在<Image source={{isStatic: true, uri: this.state.myInfo.avatarThumbPath, scale: 1}} style={styles.avatar}> </Image>无法显示
(2) Android 真机与emulator类似
(3)iOS Xcode Simulator
上传图片参数:
"file:///Users/robin/Library/Developer/CoreSimulator/Devices/9B65E4DD-4499-4B70-AB9C-769C2C2D6E77/data/Containers/Data/Application/2F50588E-19DB-443D-862B-A42F6E9FB676/tmp/5B450D32-A2A5-4DF6-A6B0-CBD54E7951EF.jpg"
返回结果:error {code: 1, description: "param error!"}
(4) iOS 真机没有测试
请问应该如何解决?

2. 推送问题

调用receiveMessageCallBack接口,可以在MessageList中显示对话信息,如果此时正处于聊天界面,自然合理,但是影响体验的是它同时会在通知栏产生推送。合理的体验应该是App处于前台时,应该正常在MessageList中加载信息,而不需要在通知栏中推送,而如果当前不是聊天页面时应产生通知栏推送,并且可以点击跳转。
因为我还使用了JPush,所以在调试中了解到JPush和JMessage互不干扰,在JPush中有监听推送和点击消息的接口,在JMessage中好像并没有此类接口。所以您认为应该如何处理更好,或者会在以后的版本中完善吗?
另外,在Example中源码中receiveMessageCallBack里的判断好像是不必要的,因为会导致MessageList无法加载接收到的信息

其他建议

我觉得应该提供一个获取所有群组信息的接口,目前我是通过getGroupIdsgetGroupInfo获取多个群组列表的,因为id列表并不是针对用户的。

期待您的回复!

getAllUnreadCount返回数据结构不一致

Environment

package: [email protected]
platform: Android & iOS

Description

调用获取未读消息数量getAllUnreadCount

JMessage.getAllUnreadCount(num => {
            console.log(num); // android: {count: Number}; ios: num:Number
 })

查看源码发现Android和iOS的确不一致,代码如下

Android:

@ReactMethod
public void getAllUnreadCount(Callback success) {
WritableMap map = Arguments.createMap();
int count = JMessageClient.getAllUnReadMsgCount();
map.putInt("count", count);
success.invoke(map);
}

iOS:

RCT_EXPORT_METHOD(getAllUnreadCount:(RCTResponseSenderBlock)callback) {
callback(@[[JMSGConversation getAllUnreadCount]]);
}

Expectation

依据功能,不需要额外的Map包装,直接返回值即可

Android发送语音失败,BUG修复

JMessageModule 类下 createSendMessage方法中的
if (type.equals(Constant.VOICE)) {
String path = map.getString(Constant.PATH);
File file = new File(map.getString(path));
....
}
改为
if (type.equals(Constant.VOICE)) {
String path = map.getString(Constant.PATH);
File file = new File(path);
....
}

麻烦写代码严禁点

安卓退出后台,点击推送的消息进入app之后,无法获取消息内容

安卓能直接推送,我也集成了jpush的插件,但是现在希望启动app后能跳转到会话的页面,但是jmessage推送的消息在启动页面之后无法获取到推送的消息内容,只能留在首页,直接在极光的官网推送的消息是可以获取消息内容的,请问实现这个功能有相关的文档吗?

关于上传头像问题

为什么我修改了当前的头像没有保存到 jmessage 的服务器,而是保存在本地,那如果我后面换一个手机登录,是不是我在之前手机上更新的头像没有了。附上保存之后的头像路径:

/data/user/0/com.lgzq/files/images/small-avatar/B1A07E096487FA0E24A4285FE2873D9C

iOS推送相关bug

iOS在锁屏状态下, onReceiveMessage 这个回调不触发,

未锁屏状态下, 后台点击推送跳转聊天页, 会出现两条相同消息, gethistory有最新的一条消息, receive也有这条消息, 就会出现这个问题

2.4.2版本

未读消息数多端显示不一样

同一账号同一条会话的unreadCount 在不同端参数不一样, 这个不是服务器控制的吗, 比如可能我在iOS上返回的是2, 到安卓上就是4了, 两个iOS也会不一样

跨应用聊天太麻烦了

我们现在有两个应用,两个应用之间需要能够相互聊天,单个应用里也要可以聊天,能不能有这么一个功能啊,两个应用归为一组,发消息都用这个组的app key, 我看环信是可以这样的,方便很多。

接收到的视频消息无法使用

请问下JMessage监听接收到视频消息怎么显示出来?好像没有可用的字段。
2hu c6np ss q5o ol6ec4

其他消息类型接收到的消息都是正常可用的数据。

"jmessage-react-plugin": "^2.2.4",
"react-native": "0.53.0",

发现一个BUG

当会话列表是空的时候,用户第一次发消息来,我发现from 里面,没有nickname和address,当用户再发消息来,它就有这2个字段了。

{
"extras": {},
"target": {
"isNoDisturb": false,
"type": "user",
"isFriend": false,
"gender": "unknown",
"nickname": "用户15xxx67",
"isInBlackList": false,
"avatarThumbPath": "",
"username": "1596xxx7",
"address": "xx",
"appKey": "075dcd70f7xxxxa5f"
},
"id": "msgId_1526955988741531",
"from": {
"isNoDisturb": false,
"username": "13xxxx5",
"isFriend": false,
"gender": "unknown",
"type": "user",
"isInBlackList": false,
"avatarThumbPath": ""
},
"serverMessageId": "1016833119",
"text": "😔",
"type": "text",
"createTime": 1526955988542
}

还有一个问题,为何后台SDK无法更新用户缩略图头像,所以我们只能放在address里面

react-redux配合navigation该怎么弄啊?

我看网上用的都是navigator加redux的案例
比如



provider里面包裹的是一个navigator组件,如果是navigation这里该怎么写啊,
const MyApp = StackNavigator({
Login: {
screen: Login,
navigationOptions: {
header: null
}
},
Main: {
screen: Main,
navigationOptions: {
header: null
}
}
});
navigation路由文件一般是这些写法,,不是一个组件,,该怎么在provider中引用啊

jmessage-react-plugin出错

jmessage-react-plugin-v2.1.0;
jcore-react-native-v1.2.1;
Android端出现错误:
Could not invoke JMessageModule.setDebugMode

null

cn.jpush.im.android.api.JMessageClient
invoke
JavaMethodWrapper.java:374
invoke
JavaModuleWrapper.java:162
run
NativeRunnable.java
handleCallback
Handler.java:739
dispatchMessage
Handler.java:95
dispatchMessage
MessageQueueThreadHandler.java:31
loop
Looper.java:135
run
MessageQueueThreadImpl.java:194
run
Thread.java:818

ios onPullToRefresh 没有反应

ios onPullToRefresh 没有反应,Android没有测试。

另外,怎么实时聊天,像淘宝客服那样,求助。。。

关于聊天室功能

有计划完善聊天室功能嘛?

我看了下聊天室那部分的原生代码,
android可以使用, 未完全测试.
ios没有实现

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.