Skip to content

Commit dfd0bc8

Browse files
author
wicked-tc130
authored
Merge pull request #672 from jpush/dev
android-支持应用在被杀死的状态下点击通知启动应用
2 parents 7512d89 + 8d1d286 commit dfd0bc8

File tree

10 files changed

+201
-114
lines changed

10 files changed

+201
-114
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ pod install
7373
pod deintegrate
7474
```
7575

76-
###2.2.2 手动方式
76+
### 2.2.2 手动方式
7777

7878
* Libraries
7979

android/src/main/AndroidManifest.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,17 @@
1616
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
1717
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
1818

19+
<!-- Optional. Required for location feature -->
20+
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
21+
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
22+
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
23+
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
24+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
25+
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
26+
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
27+
<uses-permission android:name="android.permission.GET_TASKS" />
28+
<uses-permission android:name="android.permission.VIBRATE" />
29+
1930
<application>
2031
<activity
2132
android:name="cn.jpush.android.ui.PopWinActivity"
@@ -56,6 +67,16 @@
5667
</intent-filter>
5768
</receiver>
5869

70+
<receiver
71+
android:name=".receiver.JPushBroadcastReceiver"
72+
android:enabled="true"
73+
android:exported="false">
74+
<intent-filter>
75+
<action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" />
76+
<category android:name="${applicationId}" />
77+
</intent-filter>
78+
</receiver>
79+
5980
</application>
6081

6182
</manifest>

android/src/main/java/cn/jiguang/plugins/push/JPushModule.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.facebook.react.bridge.ReactMethod;
1111
import com.facebook.react.bridge.ReadableArray;
1212
import com.facebook.react.bridge.ReadableMap;
13+
import com.facebook.react.bridge.WritableMap;
1314

1415
import org.json.JSONObject;
1516

@@ -18,6 +19,8 @@
1819

1920
import cn.jiguang.plugins.push.common.JPushConstans;
2021
import cn.jiguang.plugins.push.common.JPushLogger;
22+
import cn.jiguang.plugins.push.helper.JPushHelper;
23+
import cn.jiguang.plugins.push.receiver.JPushBroadcastReceiver;
2124
import cn.jpush.android.api.BasicPushNotificationBuilder;
2225
import cn.jpush.android.api.JPushInterface;
2326
import cn.jpush.android.data.JPushLocalNotification;
@@ -54,6 +57,11 @@ public void setDebugMode(ReadableMap readableMap) {
5457
@ReactMethod
5558
public void init() {
5659
JPushInterface.init(reactContext);
60+
if (JPushBroadcastReceiver.NOTIFICATION_BUNDLE != null) {
61+
WritableMap writableMap = JPushHelper.convertNotificationBundleToMap(JPushConstans.NOTIFICATION_OPENED, JPushBroadcastReceiver.NOTIFICATION_BUNDLE);
62+
JPushHelper.sendEvent(JPushConstans.NOTIFICATION_EVENT, writableMap);
63+
JPushBroadcastReceiver.NOTIFICATION_BUNDLE = null;
64+
}
5765
}
5866

5967
@ReactMethod
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package cn.jiguang.plugins.push.helper;
2+
3+
import android.os.Bundle;
4+
import android.text.TextUtils;
5+
6+
import com.facebook.react.bridge.Arguments;
7+
import com.facebook.react.bridge.WritableArray;
8+
import com.facebook.react.bridge.WritableMap;
9+
import com.facebook.react.modules.core.DeviceEventManagerModule;
10+
11+
import org.json.JSONObject;
12+
13+
import java.util.Iterator;
14+
import java.util.Set;
15+
16+
import cn.jiguang.plugins.push.JPushModule;
17+
import cn.jiguang.plugins.push.common.JPushConstans;
18+
import cn.jiguang.plugins.push.common.JPushLogger;
19+
import cn.jpush.android.api.CustomMessage;
20+
import cn.jpush.android.api.JPushMessage;
21+
import cn.jpush.android.api.NotificationMessage;
22+
23+
public class JPushHelper {
24+
25+
public static void sendEvent(String eventName, WritableMap params) {
26+
try {
27+
JPushModule.reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit(eventName, params);
28+
}catch (Throwable throwable){
29+
JPushLogger.e("sendEvent error:"+throwable.getMessage());
30+
}
31+
}
32+
33+
public static WritableMap convertNotificationToMap(String eventType, NotificationMessage message) {
34+
WritableMap writableMap = Arguments.createMap();
35+
writableMap.putString(JPushConstans.NOTIFICATION_EVENT_TYPE, eventType);
36+
writableMap.putString(JPushConstans.MESSAGE_ID, message.msgId);
37+
writableMap.putString(JPushConstans.TITLE, message.notificationTitle);
38+
writableMap.putString(JPushConstans.CONTENT, message.notificationContent);
39+
convertExtras(message.notificationExtras, writableMap);
40+
return writableMap;
41+
}
42+
43+
public static WritableMap convertNotificationBundleToMap(String eventType, Bundle bundle) {
44+
WritableMap writableMap = Arguments.createMap();
45+
writableMap.putString(JPushConstans.NOTIFICATION_EVENT_TYPE, eventType);
46+
writableMap.putString(JPushConstans.MESSAGE_ID, bundle.getString("cn.jpush.android.MSG_ID",""));
47+
writableMap.putString(JPushConstans.TITLE, bundle.getString("cn.jpush.android.NOTIFICATION_CONTENT_TITLE",""));
48+
writableMap.putString(JPushConstans.CONTENT, bundle.getString("cn.jpush.android.ALERT",""));
49+
convertExtras(bundle.getString("cn.jpush.android.EXTRA",""), writableMap);
50+
return writableMap;
51+
}
52+
53+
54+
public static WritableMap convertCustomMessage(CustomMessage customMessage) {
55+
WritableMap writableMap = Arguments.createMap();
56+
writableMap.putString(JPushConstans.MESSAGE_ID, customMessage.messageId);
57+
writableMap.putString(JPushConstans.CONTENT, customMessage.message);
58+
convertExtras(customMessage.extra, writableMap);
59+
return writableMap;
60+
}
61+
62+
public static WritableMap convertJPushMessageToMap(int type, JPushMessage message) {
63+
WritableMap writableMap = Arguments.createMap();
64+
Set<String> tags = message.getTags();
65+
WritableArray tagsArray = Arguments.createArray();
66+
for (String tag : tags) {
67+
tagsArray.pushString(tag);
68+
}
69+
writableMap.putInt(JPushConstans.CODE, message.getErrorCode());
70+
writableMap.putInt(JPushConstans.SEQUENCE, message.getSequence());
71+
switch (type) {
72+
case 1:
73+
writableMap.putArray(JPushConstans.TAGS, tagsArray);
74+
break;
75+
case 2:
76+
writableMap.putBoolean(JPushConstans.TAG_ENABLE, message.getTagCheckStateResult());
77+
writableMap.putString(JPushConstans.TAG, message.getCheckTag());
78+
break;
79+
case 3:
80+
writableMap.putString(JPushConstans.ALIAS, message.getAlias());
81+
break;
82+
}
83+
return writableMap;
84+
}
85+
86+
public static void convertExtras(String extras, WritableMap writableMap) {
87+
if (TextUtils.isEmpty(extras) || extras.equals("{}")) return;
88+
try {
89+
WritableMap extrasMap = Arguments.createMap();
90+
JSONObject jsonObject = new JSONObject(extras);
91+
Iterator<String> it = jsonObject.keys();
92+
while (it.hasNext()) {
93+
String key = it.next();
94+
String value = jsonObject.getString(key);
95+
extrasMap.putString(key, value);
96+
}
97+
writableMap.putMap(JPushConstans.EXTRAS, extrasMap);
98+
} catch (Throwable throwable) {
99+
JPushLogger.w("convertExtras error:" + throwable.getMessage());
100+
}
101+
}
102+
103+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package cn.jiguang.plugins.push.receiver;
2+
3+
import android.content.BroadcastReceiver;
4+
import android.content.Context;
5+
import android.content.Intent;
6+
import android.os.Bundle;
7+
8+
import cn.jiguang.plugins.push.common.JPushLogger;
9+
import cn.jpush.android.api.JPushInterface;
10+
11+
public class JPushBroadcastReceiver extends BroadcastReceiver {
12+
13+
public static Bundle NOTIFICATION_BUNDLE;
14+
15+
@Override
16+
public void onReceive(Context context, Intent data) {
17+
if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(data.getAction())) {
18+
JPushLogger.e("JPushBroadcastReceiver ACTION_NOTIFICATION_OPENED");
19+
try {
20+
NOTIFICATION_BUNDLE = data.getExtras();
21+
Intent intent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
22+
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
23+
context.startActivity(intent);
24+
} catch (Throwable throwable) {
25+
JPushLogger.e("JPushBroadcastReceiver ACTION_NOTIFICATION_OPENED error:" + throwable.getMessage());
26+
}
27+
}
28+
}
29+
30+
}

0 commit comments

Comments
 (0)