Skip to content

Commit ed40a73

Browse files
guangyaoguangyao
authored andcommitted
2 parents 2d78e42 + e715d68 commit ed40a73

File tree

9 files changed

+128
-23
lines changed

9 files changed

+128
-23
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,7 @@ public class MainApplication extends Application implements ReactApplication {
9090
@Override
9191
public void onCreate() {
9292
   //初始化方法appId以及appKey在小米开放平台获取,小米推送证书名称在网易云信后台设置
93+
   IMApplication.setDebugAble(BuildConfig.DEBUG);
9394
   IMApplication.init(this, MainActivity.class,R.drawable.ic_stat_notify_msg,new   IMApplication.MiPushConfig("小米推送证书名称","小米推送appId","小米推送的appKey"));
9495
...
9596
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.NotificationManager;
44
import android.content.Context;
5+
import android.content.pm.ApplicationInfo;
56
import android.graphics.Color;
67
import android.location.LocationProvider;
78
import android.os.Environment;
@@ -108,6 +109,9 @@ public static void init(Context context, Class mainActivityClass, @DrawableRes i
108109

109110
}
110111

112+
public static void setDebugAble(boolean debugAble){
113+
LogUtil.setDebugAble(debugAble);
114+
}
111115
private static Observer<CustomNotification> notificationObserver = new Observer<CustomNotification>() {
112116
@Override
113117
public void onEvent(CustomNotification customNotification) {
@@ -207,6 +211,7 @@ private static void initStatusBarNotificationConfig(SDKOptions options, Context
207211
// APP默认 StatusBarNotificationConfig 配置修改后,使其生效
208212
userConfig.notificationEntrance = config.notificationEntrance;
209213
userConfig.notificationFolded = config.notificationFolded;
214+
// userConfig.notificationColor = Color.parseColor("#3a9efb");
210215
}
211216
// 持久化生效
212217
// UserPreferences.setStatusConfig(config);
@@ -256,8 +261,16 @@ public static void initKit() {
256261
// init log
257262
String path = StorageUtil.getDirectoryByDirType(StorageType.TYPE_LOG);
258263
LogUtil.init(path, Log.DEBUG);
264+
}
259265

260-
266+
public static boolean isApkDebugable(Context context) {
267+
try {
268+
ApplicationInfo info = context.getApplicationInfo();
269+
return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
270+
} catch (Exception e) {
271+
e.printStackTrace();
272+
}
273+
return false;
261274
}
262275

263276
private static void registerMsgRevokeObserver() {

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ public void onResult(int code, Void aVoid, Throwable throwable) {
315315
}
316316
}
317317
});
318-
SysMessageObserver sysMessageObserver = new SysMessageObserver();
318+
SysMessageObserver sysMessageObserver = SysMessageObserver.getInstance();
319319
sysMessageObserver.loadMessages(false);
320320
sysMessageObserver.deleteSystemMessageById(contactId, false);
321321
}
@@ -1670,7 +1670,7 @@ public void stopPlay(Promise promise) {
16701670
* *****************************systemMsg 系统通知******************************************
16711671
**/
16721672

1673-
SysMessageObserver sysMessageObserver = new SysMessageObserver();
1673+
SysMessageObserver sysMessageObserver = SysMessageObserver.getInstance();
16741674

16751675
/**
16761676
* 进入系统通知消息
@@ -1679,7 +1679,7 @@ public void stopPlay(Promise promise) {
16791679
*/
16801680
@ReactMethod
16811681
public void startSystemMsg(Promise promise) {
1682-
sysMessageObserver = new SysMessageObserver();
1682+
sysMessageObserver = SysMessageObserver.getInstance();
16831683
sysMessageObserver.startSystemMsg();
16841684
}
16851685

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

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import android.app.NotificationManager;
44
import android.content.Context;
5+
import android.os.AsyncTask;
56

67
import com.netease.im.IMApplication;
78
import com.netease.im.ReactCache;
@@ -66,7 +67,7 @@ public LoginInfo getLoginInfo(Context context) {
6667
}
6768

6869
void initLogin(LoginInfo loginInfo) {
69-
DataCacheManager.buildDataCacheAsync();
70+
7071
}
7172

7273
public void login(LoginInfo loginInfo, final RequestCallback<LoginInfo> callback) {
@@ -79,8 +80,7 @@ public void onSuccess(LoginInfo loginInfo) {
7980
callback.onSuccess(loginInfo);
8081

8182
registerObserver(true);
82-
queryRecentContacts();
83-
startSystemMsgUnreadCount();
83+
startLogin();
8484
loginInfoFuture = null;
8585
}
8686

@@ -103,6 +103,21 @@ public void onException(Throwable exception) {
103103
}
104104

105105

106+
private void startLogin() {
107+
new AsyncTask<Object, Object, Object>() {
108+
109+
@Override
110+
protected Object doInBackground(Object[] params) {
111+
DataCacheManager.buildDataCacheAsync();
112+
SysMessageObserver.getInstance().loadMessages(false);
113+
queryRecentContacts();
114+
startSystemMsgUnreadCount();
115+
return null;
116+
}
117+
}.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
118+
119+
}
120+
106121
private void queryRecentContacts() {
107122
recentContactObserver.queryRecentContacts();
108123
}
@@ -122,14 +137,15 @@ synchronized void registerObserver(boolean register) {
122137
// sysMessageObserver.registerSystemObserver(register);
123138
// NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(systemMessageObserver, register);
124139
NIMClient.getService(MsgServiceObserve.class).observeCustomNotification(notificationObserver, register);
140+
SysMessageObserver.getInstance().register(register);
125141
}
126142

127143
private NotificationManager notificationManager;
128144
private Observer<CustomNotification> notificationObserver = new Observer<CustomNotification>() {
129145
@Override
130146
public void onEvent(CustomNotification customNotification) {
131147

132-
SessionUtil.receiver(getNotificationManager(),customNotification);
148+
SessionUtil.receiver(getNotificationManager(), customNotification);
133149
}
134150
};
135151

@@ -168,11 +184,12 @@ public void logout() {
168184
LoginSyncDataStatusObserver.getInstance().reset();
169185
}
170186

171-
public void startSystemMsgUnreadCount(){
187+
public void startSystemMsgUnreadCount() {
172188
registerSystemMsgUnreadCount(true);
173189
int unread = NIMClient.getService(SystemMessageService.class).querySystemMessageUnreadCountBlock();
174190
ReactCache.emit(ReactCache.observeUnreadCountChange, Integer.toString(unread));
175191
}
192+
176193
boolean hasRegisterSystemMsgUnreadCount;
177194
private Observer<Integer> sysMsgUnreadCountChangedObserver = new Observer<Integer>() {
178195
@Override

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

Lines changed: 73 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,18 @@
3030
public class SysMessageObserver {
3131

3232
final static String TAG = "SysMessageObserver";
33+
34+
static class InstanceHolder {
35+
final static SysMessageObserver instance = new SysMessageObserver();
36+
}
37+
38+
private SysMessageObserver() {
39+
}
40+
41+
public static SysMessageObserver getInstance() {
42+
return InstanceHolder.instance;
43+
}
44+
3345
/*******************************系统消息********************************/
3446

3547
private static final boolean MERGE_ADD_FRIEND_VERIFY = true; // 是否要合并好友申请,同一个用户仅保留最近一条申请内容(默认不合并)
@@ -41,6 +53,7 @@ public class SysMessageObserver {
4153
private Set<String> addFriendVerifyRequestAccounts = new HashSet<>(); // 发送过好友申请的账号(好友申请合并用)
4254

4355
private Set<Long> itemIds = new HashSet<>();
56+
private List<Observer<SystemMessage>> observerList = new ArrayList<>();
4457

4558
// db
4659
private boolean firstLoad = true;
@@ -53,6 +66,7 @@ public void loadMessages(boolean refresh) {
5366
int validMessageCount = 0; // 实际加载的数量(排除被过滤被合并的条目)
5467
List<String> messageFromAccounts = new ArrayList<>(LOAD_MESSAGE_COUNT);
5568

69+
List<SystemMessage> deleteList = new ArrayList<>();
5670
while (true) {
5771
List<SystemMessage> temps = NIMClient.getService(SystemMessageService.class)
5872
.querySystemMessagesBlock(loadOffset, LOAD_MESSAGE_COUNT);
@@ -73,7 +87,7 @@ public void loadMessages(boolean refresh) {
7387

7488
// 同一个账号的好友申请仅保留最近一条
7589
if (addFriendVerifyFilter(m)) {
76-
NIMClient.getService(SystemMessageService.class).deleteSystemMessage(m.getMessageId());//删除旧的加好友通知
90+
deleteList.add(m);
7791
continue;
7892
}
7993

@@ -100,6 +114,13 @@ public void loadMessages(boolean refresh) {
100114
}
101115
}
102116
firstLoad = false;
117+
if (!deleteList.isEmpty()) {
118+
for (SystemMessage m : deleteList) {
119+
NIMClient.getService(SystemMessageService.class).deleteSystemMessage(m.getMessageId());//删除旧的加好友通知
120+
}
121+
loadOffset -= deleteList.size();
122+
deleteList.clear();
123+
}
103124
// 更新数据源,刷新界面
104125
if (refresh)
105126
refresh();
@@ -110,46 +131,84 @@ public void loadMessages(boolean refresh) {
110131

111132
boolean hasRegister;
112133

134+
public void register(boolean register) {
135+
136+
NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(baseSystemMessageObserver, register);
137+
registerSystemObserver(new Observer<SystemMessage>() {
138+
@Override
139+
public void onEvent(SystemMessage systemMessage) {
140+
if (hasRegister) {
141+
return;
142+
}
143+
onIncomingMessage(systemMessage, false);
144+
}
145+
}, register);
146+
}
147+
113148
public void registerSystemObserver(boolean register) {
114149
if (hasRegister && register) {
115150
return;
116151
}
117152
hasRegister = register;
118-
NIMClient.getService(SystemMessageObserver.class).observeReceiveSystemMsg(systemMessageObserver, register);
153+
registerSystemObserver(systemMessageObserver, register);
119154
}
120155

156+
public void registerSystemObserver(Observer<SystemMessage> o, boolean register) {
157+
if (o == null) {
158+
return;
159+
}
160+
161+
if (register) {
162+
if (!observerList.contains(o)) {
163+
observerList.add(o);
164+
}
165+
} else {
166+
observerList.remove(o);
167+
}
168+
169+
}
170+
171+
private Observer<SystemMessage> baseSystemMessageObserver = new Observer<SystemMessage>() {
172+
@Override
173+
public void onEvent(SystemMessage systemMessage) {
174+
for (Observer<SystemMessage> o : observerList) {
175+
o.onEvent(systemMessage);
176+
}
177+
}
178+
};
121179
private Observer<SystemMessage> systemMessageObserver = new Observer<SystemMessage>() {
122180
@Override
123181
public void onEvent(SystemMessage systemMessage) {
124-
onIncomingMessage(systemMessage);
182+
onIncomingMessage(systemMessage, true);
125183
}
126184
};
127185

128186

129-
private void onIncomingMessage(final SystemMessage message) {
187+
private void onIncomingMessage(final SystemMessage message, boolean refresh) {
130188
// 同一个账号的好友申请仅保留最近一条
189+
SystemMessage del = null;
131190
if (addFriendVerifyFilter(message)) {
132-
SystemMessage del = null;
133191
for (SystemMessage m : sysItems) {
134192
if (TextUtils.equals(m.getFromAccount(), message.getFromAccount()) && m.getType() == SystemMessageType.AddFriend) {
135193
AddFriendNotify attachData = (AddFriendNotify) m.getAttachObject();
136194
if (attachData != null && attachData.getEvent() == AddFriendNotify.Event.RECV_ADD_FRIEND_VERIFY_REQUEST) {
137195
del = m;
138-
NIMClient.getService(SystemMessageService.class).deleteSystemMessage(m.getMessageId());//删除旧的加好友通知
139196
break;
140197
}
141198
}
142199
}
143-
144-
if (del != null) {
145-
sysItems.remove(del);
146-
}
200+
}
201+
if (del != null) {
202+
sysItems.remove(del);
203+
NIMClient.getService(SystemMessageService.class).deleteSystemMessage(del.getMessageId());//删除旧的加好友通知
204+
} else {
205+
loadOffset++;
147206
}
148207

149-
loadOffset++;
150208
sysItems.add(0, message);
151209

152-
refresh();
210+
if (refresh)
211+
refresh();
153212

154213
// 收集未知用户资料的账号集合并从远程获取
155214
List<String> messageFromAccounts = new ArrayList<>(1);
@@ -229,6 +288,7 @@ private void refresh() {
229288
public void startSystemMsg() {
230289
loadMessages(true);
231290
registerSystemObserver(true);
291+
NIMClient.getService(SystemMessageService.class).resetSystemMessageUnreadCount();
232292
}
233293

234294
public void stopSystemMsg() {
@@ -334,7 +394,7 @@ private void onProcessFailed(final int code, long messageId) {
334394
}
335395

336396
SystemMessageStatus status = SystemMessageStatus.expired;
337-
NIMClient.getService(SystemMessageService.class).setSystemMessageRead(messageId);
397+
// NIMClient.getService(SystemMessageService.class).setSystemMessageRead(messageId);
338398
NIMClient.getService(SystemMessageService.class).setSystemMessageStatus(messageId, status);
339399
refreshViewHolder(messageId, status);
340400
}

android/src/main/java/com/netease/im/uikit/common/framework/NimTaskExecutor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@
1212
import java.util.concurrent.TimeUnit;
1313
import java.util.concurrent.atomic.AtomicInteger;
1414

15+
/**
16+
* NimTaskExecutor taskExecutor = new NimTaskExecutor("NIM_HTTP_TASK_EXECUTOR", new NimTaskExecutor.Config(1, 3, 10 * 1000, true));
17+
*/
1518
public class NimTaskExecutor implements Executor {
1619

1720
private final static int QUEUE_INIT_CAPACITY = 20;

android/src/main/java/com/netease/im/uikit/common/util/log/LogImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@ final class LogImpl {
2626
private static final DateFormat fileNameFormat = new SimpleDateFormat(FILE_FORMAT, Locale.getDefault());
2727

2828
private static final Executor logger = Executors.newSingleThreadExecutor();
29+
private static boolean DEBUG = false;
2930

3031
public static void init(String logPath, int level) {
3132
LogImpl.logPath = logPath;
3233
LogImpl.level = level;
3334
}
34-
35+
public static void setDebugAble(boolean debugAble){
36+
DEBUG = debugAble;
37+
}
3538
public static void i(String tag, String msg) {
3639
i(tag, msg, null);
3740
}
@@ -77,6 +80,9 @@ public static void o(int priority, String tag, String msg) {
7780
}
7881

7982
public static void o(final int priority, final String tag, final String msg, final Throwable tr) {
83+
if(!DEBUG){
84+
return;
85+
}
8086
final long time = System.currentTimeMillis();
8187
final long threadId = Thread.currentThread().getId();
8288
logger.execute(new Runnable() {

android/src/main/java/com/netease/im/uikit/common/util/log/LogUtil.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
package com.netease.im.uikit.common.util.log;
22

33
public class LogUtil {
4+
5+
public static void setDebugAble(boolean debugAble){
6+
LogImpl.setDebugAble(debugAble);
7+
}
48
public static final void init(String logFile, int level) {
59
LogImpl.init(logFile, level);
610
}

react-native-android.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public void onCreate() {
3030
......
3131
//小米推送设置 R.drawable.ic_stat_notify_msg这个是 通知图标
3232
/初始化方法appId以及appKey在小米开放平台获取,小米推送证书名称在网易云信后台设置
33+
IMApplication.setDebugAble(BuildConfig.DEBUG);
3334
   IMApplication.init(this, MainActivity.class,R.drawable.ic_stat_notify_msg,
3435
new IMApplication.MiPushConfig("小米推送证书名称","小米推送appId","小米推送的appKey"));
3536

0 commit comments

Comments
 (0)