-
Notifications
You must be signed in to change notification settings - Fork 60
Expand file tree
/
Copy pathGetuiModule.java
More file actions
executable file
·346 lines (296 loc) · 9.33 KB
/
GetuiModule.java
File metadata and controls
executable file
·346 lines (296 loc) · 9.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
package com.getui.reactnativegetui;
import android.content.Context;
import android.support.annotation.Nullable;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.igexin.sdk.PushManager;
import com.igexin.sdk.Tag;
/**
* Created by zhourh on 2017/3/6.
*/
public class GetuiModule extends ReactContextBaseJavaModule {
private static final String TAG = "GetuiModule";
public static final String EVENT_RECEIVE_REMOTE_NOTIFICATION = "receiveRemoteNotification";
public static final String EVENT_TYPE_RECEIVE_CID = "cid";
public static final String EVENT_TYPE_PAYLOAD = "payload";
public static final String EVENT_TYPE_CMD = "cmd";
public static final String EVENT_TYPE_NOTIFICATION_ARRIVED = "notificationArrived";
public static final String EVENT_TYPE_NOTIFICATION_CLICKED = "notificationClicked";
private static ReactApplicationContext mRAC;
private static GetuiModule mModule;
private static Context mContext;
public GetuiModule(ReactApplicationContext reactContext) {
super(reactContext);
mRAC = reactContext;
}
@Override
public boolean canOverrideExistingModule() {
return true;
}
@Override
public String getName() {
return "GetuiModule";
}
@Override
public void initialize() {
super.initialize();
mModule = this;
}
@Override
public void onCatalystInstanceDestroy() {
super.onCatalystInstanceDestroy();
mModule = null;
}
/**
* 初始化推送服务
*/
public static void initPush(Context context){
mContext = context;
GetuiLogger.log("initPush, mContext = " + mContext);
PushManager.getInstance().initialize(mContext, DemoPushService.class);
PushManager.getInstance().registerPushIntentService(mContext, PushIntentService.class);
}
/**
* Android 不存在 destroy方法,仅停止推送服务
*/
@ReactMethod
public void destroy(){
// PushManager.getInstance().stopService(mContext);
}
/**
* 停止SDK服务
*/
@ReactMethod
public void stop(){
// PushManager.getInstance().stopService(mContext);
}
/**
* 恢复SDK运行,重新接收推送
*/
@ReactMethod
public void resume(){
PushManager.getInstance().turnOnPush(mContext);
}
/**
* 打开SDK的推送.
*/
@ReactMethod
public void turnOnPush(){
PushManager.getInstance().turnOnPush(mContext);
}
/**
* 关闭SDK的推送.
*/
@ReactMethod
public void turnOffPush(){
PushManager.getInstance().turnOffPush(mContext);
}
/**
* 获取SDK的Cid
*
* @return Cid值
*/
@ReactMethod
public void clientId(Callback callback){
String clientId = PushManager.getInstance().getClientid(mContext);
GetuiLogger.log("clientId = " + clientId);
callback.invoke(clientId);
}
/**
* 获取SDK运行状态,
*
* @return 运行状态 1为已开启推送,2为已停止推送
*/
@ReactMethod
public void status(Callback callback){
boolean isPushTurnOn = PushManager.getInstance().isPushTurnedOn(mContext);
GetuiLogger.log("isPushTurnOn = " + isPushTurnOn);
callback.invoke(isPushTurnOn ? "1" : "2" );
}
/**
* 获取SDK版本号
*
* @return 版本号
*/
@ReactMethod
public void version(Callback callback){
String version = PushManager.getInstance().getVersion(mContext);
GetuiLogger.log("version = " + version);
callback.invoke(version);
}
/**
* 是否允许SDK 后台运行(默认为true)
* 该方法在Android中无效,仅在iOS有效
* @param isEnable
*/
@ReactMethod
public void runBackgroundEnable(boolean isEnable){
// Empty
}
/**
* 地理围栏功能,设置地理围栏是否运行
* 该方法在Android中无效,仅在iOS有效,在AndroidManifest.xml开启相应地权限
* <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
* <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
* @param isEnable 设置地理围栏功能是否运行(默认值:NO)
* @param isVerify 设置是否SDK主动弹出用户定位请求(默认值:NO)
*/
@ReactMethod
public void lbsLocationEnable(boolean isEnable, boolean isVerify){
// Empty
}
/**
* 设置渠道
* 该方法在Android中无效,仅在iOS有效Ø
* @param channelId 渠道值,可以为空值
*/
@ReactMethod
public void setChannelId(String channelId){
// Empty
}
/**
* 向个推服务器注册DeviceToken
* 该方法在Android中无效,仅在iOS有效
* @param deviceToken
*/
@ReactMethod
public void registerDeviceToken(String deviceToken){
// Empty
}
/**
* 绑定别名功能:后台可以根据别名进行推送
*
* @param alias 别名字符串
* @param aSn 绑定序列码, Android中无效,仅在iOS有效
*/
@ReactMethod
public void bindAlias(String alias, String aSn){
PushManager.getInstance().bindAlias(mContext, alias);
}
/**
* 取消绑定别名功能
*
* @param alias 别名字符串
* @param aSn 绑定序列码, Android中无效,仅在iOS有效
*/
@ReactMethod
public void unbindAlias(String alias, String aSn){
PushManager.getInstance().unBindAlias(mContext, alias, false);
}
/**
* 给用户打标签 , 后台可以根据标签进行推送
*
* @param tags 别名数组
*/
@ReactMethod
public void setTag(ReadableArray tags){
if (tags == null || tags.size() == 0){
return;
}
Tag[] tagArray = new Tag[tags.size()];
for (int i = 0; i < tags.size(); i++ ){
Tag tag = new Tag();
tag.setName(tags.getString(i));
tagArray[i] = tag;
}
PushManager.getInstance().setTag(mContext, tagArray, "setTag");
}
/**
* 设置关闭推送模式
* Android中无效,仅在iOS有效
*
* @param isValue
*/
@ReactMethod
public void setPushModeForOff(boolean isValue){
// Empty
}
/**
* 同步角标值到个推服务器
* Android中无效,仅在iOS有效
* @param value
*/
@ReactMethod
public void setBadge(int value){
// Empty
}
/**
* 重置角标值到个推服务器
* Android中无效,仅在iOS有效
* @param badge
*/
@ReactMethod
public void resetBadge(int badge){
//Empty
}
/**
* SDK发送上行消息结果
* Android中无效,仅在iOS有效
* @param body 需要发送的消息数据
* @param error 如果发送成功返回messageid
*
*/
@ReactMethod
public void sendMessage(String body, String error){
// Empty
}
/**
* 上行第三方自定义回执actionid
* @param actionId 用户自定义的actionid,int类型,取值90001-90999。
* @param taskId 下发任务的任务ID
* @param msgId 下发任务的消息ID
*
* @return 上行成功或失败,若上行失败,可能上行失败;taskid为空或者 messageid 为空 或者 actionid 不在取值范围以内
*/
@ReactMethod
public void sendFeedbackMessage(int actionId, String taskId, String msgId, Callback callback){
callback.invoke(PushManager.getInstance().sendFeedbackMessage(mContext, taskId, msgId, actionId));
}
/**
* 设置静默时间
*
* @param beginHour 开始时间,设置范围在0-23小时之间,单位 h
* @param duration 持续时间,设置范围在0-23小时之间。持续时间为0则不静默,单位 h
*/
@ReactMethod
public void sendSilentTime(int beginHour, int duration, Callback callback){
callback.invoke(PushManager.getInstance().setSilentTime(mContext, beginHour, duration));
}
/**
* 设置Socket超时时间
* @param times 超时时间
*/
@ReactMethod
public void setSocketTimeout(int times){
PushManager.getInstance().setSocketTimeout(mContext, times);
}
/**
* 往JavaScript发送事件通知
* @param eventName
* @param type
* @param value
*/
public static void sendEvent(String eventName, String type, String key, String value){
WritableMap param = Arguments.createMap();
param.putString("type", type);
param.putString(key, value);
sendEvent(eventName, param);
}
/**
* 往JavaScript发送事件通知
* @param eventName
* @param params
*/
public static void sendEvent(String eventName, @Nullable WritableMap params){
if (mRAC != null && mRAC.hasActiveCatalystInstance()) {
mRAC.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}
}