Skip to content

Commit 0844ad1

Browse files
guangyaoguangyao
authored andcommitted
2 parents 351125c + 89357ef commit 0844ad1

File tree

11 files changed

+171
-52
lines changed

11 files changed

+171
-52
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ dependencies {
5252

5353
```
5454
import com.netease.im.uikit.permission.MPermission;
55+
import com.netease.im.RNNeteaseImModule;
56+
import com.netease.im.ReceiverMsgParser;
5557
5658
public class MainActivity extends ReactActivity {
5759
@@ -61,7 +63,6 @@ public class MainActivity extends ReactActivity {
6163
protected void onCreate(Bundle savedInstanceState) {
6264
super.onCreate(savedInstanceState);
6365
if(ReceiverMsgParser.checkOpen(getIntent())){//在后台时处理点击推送消息
64-
ReactCache.emit(ReactCache.observeLaunchPushEvent, ReceiverMsgParser.getWritableMap(getIntent()));
6566
RNNeteaseImModule.launch = getIntent();
6667
}
6768
}

android/src/main/AndroidManifest.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,12 @@
137137
<action android:name="com.xiaomi.mipush.ERROR"/>
138138
</intent-filter>
139139
</receiver>
140+
<receiver android:name=".receiver.NetworkReceiver">
141+
<intent-filter>
142+
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
143+
<category android:name="android.intent.category.DEFAULT"/>
144+
</intent-filter>
145+
</receiver>
140146
</application>
141147
</manifest>
142148

android/src/main/java/com/netease/im/IMApplication.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.netease.nimlib.sdk.SDKOptions;
3434
import com.netease.nimlib.sdk.StatusBarNotificationConfig;
3535
import com.netease.nimlib.sdk.auth.LoginInfo;
36+
import com.netease.nimlib.sdk.mixpush.MixPushService;
3637
import com.netease.nimlib.sdk.mixpush.NIMPushClient;
3738
import com.netease.nimlib.sdk.msg.MessageNotifierCustomization;
3839
import com.netease.nimlib.sdk.msg.MsgService;
@@ -89,8 +90,9 @@ public static void init(Context context, Class mainActivityClass, @DrawableRes i
8990
IMApplication.notify_msg_drawable_id = notify_msg_drawable_id;
9091

9192
// 注册小米推送appID 、appKey 以及在云信管理后台添加的小米推送证书名称,该逻辑放在 NIMClient init 之前
92-
if (miPushConfig != null)
93+
if (miPushConfig != null) {
9394
NIMPushClient.registerMiPush(context, miPushConfig.certificate, miPushConfig.appID, miPushConfig.appKey);
95+
}
9496

9597
NIMClient.init(context, getLoginInfo(), getOptions(context));
9698
// crash handler
@@ -102,6 +104,9 @@ public static void init(Context context, Class mainActivityClass, @DrawableRes i
102104
PinYin.init(context);
103105
PinYin.validate();
104106

107+
if (miPushConfig != null) {
108+
NIMClient.getService(MixPushService.class).enable(true);
109+
}
105110
// 初始化Kit模块
106111
initKit();
107112

android/src/main/java/com/netease/im/RNNeteaseImModule.java

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ public void login(String contactId, String token, final Promise promise) {
150150
// LogUtil.w(TAG, "md5:" + MD5.getStringMD5(token));
151151

152152
NIMClient.getService(AuthService.class).openLocalCache(contactId);
153+
LogUtil.w(TAG, "s:" + NIMClient.getStatus().name());
153154
LoginService.getInstance().login(new LoginInfo(contactId, token), new RequestCallback<LoginInfo>() {
154155
@Override
155156
public void onSuccess(LoginInfo loginInfo) {
@@ -174,7 +175,6 @@ public void onException(Throwable throwable) {
174175

175176
}
176177
});
177-
178178
}
179179

180180
/**
@@ -183,6 +183,7 @@ public void onException(Throwable throwable) {
183183
@ReactMethod
184184
public void logout() {
185185
LogUtil.w(TAG, "logout");
186+
status = "";
186187
LoginService.getInstance().logout();
187188

188189
}
@@ -1385,7 +1386,22 @@ public void onResult(int code, Void aVoid, Throwable throwable) {
13851386
@ReactMethod
13861387
public void resendMessage(String messageId, final Promise promise) {
13871388
LogUtil.w(TAG, "resendMessage" + messageId);
1388-
sessionService.resendMessage(messageId);
1389+
sessionService.queryMessage(messageId, new SessionService.OnMessageQueryListener() {
1390+
@Override
1391+
public int onResult(int code, IMMessage message) {
1392+
Map<String, Object> map = message.getLocalExtension();
1393+
if (map != null) {
1394+
if (map.containsKey("resend")) {
1395+
return -1;
1396+
}
1397+
}
1398+
promise.resolve("200");
1399+
sessionService.resendMessage(message);
1400+
1401+
return 0;
1402+
}
1403+
});
1404+
13891405
}
13901406

13911407
/**
@@ -1944,6 +1960,7 @@ public void onNewIntent(Intent intent) {
19441960
intent.putExtras(getIntent());
19451961
reactContext.getCurrentActivity().setIntent(intent);
19461962
ReactCache.emit(ReactCache.observeBackgroundPushEvent, ReceiverMsgParser.getWritableMap(intent));
1963+
launch = null;
19471964
}
19481965

19491966
}
@@ -1963,20 +1980,27 @@ public void getLaunch(Promise promise) {
19631980

19641981
@Override
19651982
public void onHostResume() {
1966-
if (reactContext.getCurrentActivity() != null)
1967-
LogUtil.w(TAG, reactContext.getCurrentActivity().getClass().getPackage().getName());
1968-
LogUtil.w(TAG, "onHostResume");
1969-
1970-
if (!TextUtils.isEmpty(status)) {
1971-
WritableMap r = Arguments.createMap();
1972-
r.putString("status", status);
1973-
ReactCache.emit(ReactCache.observeOnKick, r);
1974-
status = "";
1983+
1984+
LogUtil.w(TAG, "onHostResume:" + status);
1985+
1986+
if (!TextUtils.isEmpty(status) && !"onHostPause".equals(status)) {
1987+
if (NIMClient.getStatus().wontAutoLogin()) {
1988+
WritableMap r = Arguments.createMap();
1989+
r.putString("status", status);
1990+
ReactCache.emit(ReactCache.observeOnKick, r);
1991+
}
19751992
}
1993+
// if (NIMClient.getStatus().wontAutoLogin()) {
1994+
// Toast.makeText(IMApplication.getContext(), "您的帐号已在别的设备登录,请重新登陆", Toast.LENGTH_SHORT).show();
1995+
// }
1996+
status = "";
19761997
}
19771998

19781999
@Override
19792000
public void onHostPause() {
2001+
if (TextUtils.isEmpty(status)) {
2002+
status = "onHostPause";
2003+
}
19802004
LogUtil.w(TAG, "onHostPause");
19812005
}
19822006

android/src/main/java/com/netease/im/ReactCache.java

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ public static Object createRecentList(List<RecentContact> recents, int unreadNum
271271
map.putString("content", content);
272272
array.pushMap(map);
273273
}
274-
LogUtil.w(TAG, array + "");
274+
// LogUtil.w(TAG, array + "");
275275
}
276276
writableMap.putArray("recents", array);
277277
writableMap.putString("unreadCount", Integer.toString(unreadNumTotal));
@@ -778,7 +778,7 @@ static String getMessageType(IMMessage item) {
778778
type = MessageConstant.MsgType.CUSTON;
779779
break;
780780
}
781-
}else {
781+
} else {
782782
type = MessageConstant.MsgType.CUSTON;
783783
}
784784
break;
@@ -790,8 +790,8 @@ static String getMessageType(IMMessage item) {
790790
return type;
791791
}
792792

793-
static String getMessageStatus(MsgStatusEnum statusEnum){
794-
switch (statusEnum){
793+
static String getMessageStatus(MsgStatusEnum statusEnum) {
794+
switch (statusEnum) {
795795
case draft:
796796
return MessageConstant.MsgStatus.SEND_DRAFT;
797797
case sending:
@@ -809,6 +809,7 @@ static String getMessageStatus(MsgStatusEnum statusEnum){
809809
}
810810

811811
}
812+
812813
final static String MESSAGE_EXTEND = MessageConstant.Message.EXTEND;
813814

814815
/**
@@ -842,20 +843,27 @@ public static WritableMap createMessage(IMMessage item) {
842843

843844
WritableMap user = Arguments.createMap();
844845
String fromAccount = item.getFromAccount();
846+
String avatar = null;
847+
845848
String fromNick = null;
849+
String displayName = null;
846850
try {
847851
fromNick = item.getFromNick();
848852
} catch (Exception e) {
849853
e.printStackTrace();
850854
}
851-
user.putString(MessageConstant.User.USER_ID, fromAccount);
855+
if (!TextUtils.isEmpty(fromAccount)) {
852856

853-
if (item.getSessionType() == SessionTypeEnum.Team && !TextUtils.equals(LoginService.getInstance().getAccount(), fromAccount)) {
854-
user.putString(MessageConstant.User.DISPLAY_NAME, getTeamUserDisplayName(item.getSessionId(), fromAccount));
855-
} else {
856-
user.putString(MessageConstant.User.DISPLAY_NAME, !TextUtils.isEmpty(fromNick) ? fromNick : NimUserInfoCache.getInstance().getUserDisplayName(fromAccount));
857+
858+
if (item.getSessionType() == SessionTypeEnum.Team && !TextUtils.equals(LoginService.getInstance().getAccount(), fromAccount)) {
859+
displayName = getTeamUserDisplayName(item.getSessionId(), fromAccount);
860+
} else {
861+
displayName = !TextUtils.isEmpty(fromNick) ? fromNick : NimUserInfoCache.getInstance().getUserDisplayName(fromAccount);
862+
}
863+
avatar = NimUserInfoCache.getInstance().getAvatar(fromAccount);
857864
}
858-
String avatar = NimUserInfoCache.getInstance().getAvatar(fromAccount);
865+
user.putString(MessageConstant.User.DISPLAY_NAME, displayName);
866+
user.putString(MessageConstant.User.USER_ID, fromAccount);
859867
user.putString(MessageConstant.User.AVATAR_PATH, avatar);
860868
itemMap.putMap(MessageConstant.Message.FROM_USER, user);
861869

android/src/main/java/com/netease/im/ReceiverMsgParser.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,29 +80,33 @@ public static Bundle openIntent(Intent intent) {
8080
public static WritableMap getWritableMap(Intent intent) {
8181
WritableMap rr = Arguments.createMap();
8282
if (intent != null && canAutoLogin()) {
83-
WritableMap r = Arguments.createMap();
83+
8484
if (intent.hasExtra(NimIntent.EXTRA_NOTIFY_CONTENT)) {
8585
ArrayList<IMMessage> messages = (ArrayList<IMMessage>) intent.getSerializableExtra(NimIntent.EXTRA_NOTIFY_CONTENT);
86-
if (messages == null || messages.size() > 1) {
86+
if (messages == null || messages.isEmpty()) {
8787
rr.putString("type", "sessionList");
8888
} else {
89+
WritableMap r = Arguments.createMap();
8990
IMMessage message = messages.get(0);
9091
rr.putString("type", "session");
9192
r.putString("sessionType", Integer.toString(message.getSessionType().getValue()));
9293
r.putString("sessionId", message.getSessionId());
9394
r.putString("sessionName", SessionUtil.getSessionName(message.getSessionId(), message.getSessionType(), false));
95+
rr.putMap("sessionBody", r);
9496
}
9597
} else if (intent.hasExtra(Extras.EXTRA_JUMP_P2P)) {
9698
Intent data = intent.getParcelableExtra(Extras.EXTRA_DATA);
9799
String account = data.getStringExtra(Extras.EXTRA_ACCOUNT);
98100
if (!TextUtils.isEmpty(account)) {
101+
WritableMap r = Arguments.createMap();
99102
rr.putString("type", "session");
100103
r.putString("sessionType", Integer.toString(SessionTypeEnum.P2P.getValue()));
101104
r.putString("sessionId", account);
102105
r.putString("sessionName", SessionUtil.getSessionName(account, SessionTypeEnum.P2P, false));
106+
rr.putMap("sessionBody", r);
103107
}
108+
104109
}
105-
rr.putMap("sessionBody", r);
106110
printIntent(intent);
107111
}
108112

android/src/main/java/com/netease/im/login/LoginService.java

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class LoginService {
3434
final static String TAG = "LoginService";
3535
// 自己的用户帐号
3636
private String account;
37+
private String token;
3738
private AbortableFuture<LoginInfo> loginInfoFuture;
3839

3940
private LoginService() {
@@ -62,22 +63,29 @@ public String getAccount() {
6263
}
6364

6465
public LoginInfo getLoginInfo(Context context) {
65-
LoginInfo info = new LoginInfo(account, null);
66+
LoginInfo info = new LoginInfo(account, token);
6667
return info;
6768
}
6869

6970
void initLogin(LoginInfo loginInfo) {
7071

7172
}
7273

73-
public void login(LoginInfo loginInfo, final RequestCallback<LoginInfo> callback) {
74-
loginInfoFuture = NIMClient.getService(AuthService.class).login(loginInfo);
74+
public void autoLogin() {
75+
login(getLoginInfo(null), null);
76+
}
77+
78+
public void login(final LoginInfo loginInfoP, final RequestCallback<LoginInfo> callback) {
79+
loginInfoFuture = NIMClient.getService(AuthService.class).login(loginInfoP);
7580
loginInfoFuture.setCallback(new RequestCallback<LoginInfo>() {
7681
@Override
7782
public void onSuccess(LoginInfo loginInfo) {
7883
account = loginInfo.getAccount();
84+
token = loginInfoP.getToken();
7985
initLogin(loginInfo);
80-
callback.onSuccess(loginInfo);
86+
if (callback != null) {
87+
callback.onSuccess(loginInfo);
88+
}
8189

8290
registerObserver(true);
8391
startLogin();
@@ -87,14 +95,18 @@ public void onSuccess(LoginInfo loginInfo) {
8795

8896
@Override
8997
public void onFailed(int code) {
90-
callback.onFailed(code);
91-
registerObserver(false);
98+
if (callback != null) {
99+
callback.onFailed(code);
100+
}
101+
registerObserver(true);
92102
loginInfoFuture = null;
93103
}
94104

95105
@Override
96106
public void onException(Throwable exception) {
97-
callback.onException(exception);
107+
if (callback != null) {
108+
callback.onException(exception);
109+
}
98110
registerObserver(false);
99111
loginInfoFuture = null;
100112
}
@@ -181,6 +193,7 @@ public void logout() {
181193
// 清理缓存&注销监听&清除状态
182194
DataCacheManager.clearDataCache();
183195
account = null;
196+
token = null;
184197
LoginSyncDataStatusObserver.getInstance().reset();
185198
}
186199

android/src/main/java/com/netease/im/login/RecentContactObserver.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.netease.im.session.extension.CustomAttachmentType;
1212
import com.netease.im.uikit.cache.SimpleCallback;
1313
import com.netease.im.uikit.cache.TeamDataCache;
14+
import com.netease.im.uikit.common.util.log.LogUtil;
1415
import com.netease.nimlib.sdk.NIMClient;
1516
import com.netease.nimlib.sdk.Observer;
1617
import com.netease.nimlib.sdk.RequestCallbackWrapper;
@@ -306,7 +307,6 @@ public void onEvent(LoginSyncStatus loginSyncStatus) {
306307

307308
@Override
308309
public void onEvent(StatusCode code) {
309-
RNNeteaseImModule.status = "";
310310
if (code != PWD_ERROR && code.wontAutoLogin()) {
311311
WritableMap r = Arguments.createMap();
312312
String status = "";
@@ -321,10 +321,17 @@ public void onEvent(StatusCode code) {
321321
status = "2";
322322
break;
323323
}
324-
RNNeteaseImModule.status = status;
324+
if ("onHostPause".equals(RNNeteaseImModule.status)) {
325+
RNNeteaseImModule.status = status;
326+
}else {
327+
RNNeteaseImModule.status = "";
328+
}
325329
r.putString("status", status);
326330
ReactCache.emit(ReactCache.observeOnKick, r);
331+
} else {
332+
RNNeteaseImModule.status = "";
327333
}
334+
328335
WritableMap r = Arguments.createMap();
329336
String codeValue;
330337
switch (code) {
@@ -336,6 +343,8 @@ public void onEvent(StatusCode code) {
336343
break;
337344
}
338345
r.putString("status", codeValue);
346+
LogUtil.w(TAG, "onHostStatus1:" + RNNeteaseImModule.status);
347+
LogUtil.w(TAG, "onHostStatus2:" + codeValue);
339348
ReactCache.emit(ReactCache.observeOnlineStatus, r);
340349
}
341350
};

0 commit comments

Comments
 (0)