Skip to content

Commit 1424757

Browse files
fix(messaging, android): stop app from crashing when DartCallback or Context is null (#12842)
1 parent 9659749 commit 1424757

File tree

3 files changed

+17
-1
lines changed

3 files changed

+17
-1
lines changed

packages/firebase_messaging/firebase_messaging/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingBackgroundExecutor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ public class FlutterFirebaseMessagingBackgroundExecutor implements MethodCallHan
5555
*/
5656
public static void setCallbackDispatcher(long callbackHandle) {
5757
Context context = ContextHolder.getApplicationContext();
58+
if (context == null) {
59+
Log.e(TAG, "Context is null, cannot continue.");
60+
return;
61+
}
5862
SharedPreferences prefs =
5963
context.getSharedPreferences(FlutterFirebaseMessagingUtils.SHARED_PREFERENCES_KEY, 0);
6064
prefs.edit().putLong(CALLBACK_HANDLE_KEY, callbackHandle).apply();
@@ -176,6 +180,12 @@ public void startBackgroundIsolate(long callbackHandle, FlutterShellArgs shellAr
176180
// lookup will fail.
177181
FlutterCallbackInformation flutterCallback =
178182
FlutterCallbackInformation.lookupCallbackInformation(callbackHandle);
183+
184+
if (flutterCallback == null) {
185+
Log.e(TAG, "Failed to find registered callback");
186+
return;
187+
}
188+
179189
DartExecutor executor = backgroundFlutterEngine.getDartExecutor();
180190
initializeMethodChannel(executor);
181191

packages/firebase_messaging/firebase_messaging/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingPlugin.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ private void initInstance(BinaryMessenger messenger) {
8787

8888
@Override
8989
public void onAttachedToEngine(FlutterPluginBinding binding) {
90+
ContextHolder.setApplicationContext(binding.getApplicationContext());
9091
initInstance(binding.getBinaryMessenger());
9192
}
9293

packages/firebase_messaging/firebase_messaging/android/src/main/java/io/flutter/plugins/firebase/messaging/FlutterFirebaseMessagingReceiver.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,12 @@ public class FlutterFirebaseMessagingReceiver extends BroadcastReceiver {
2020
public void onReceive(Context context, Intent intent) {
2121
Log.d(TAG, "broadcast received for message");
2222
if (ContextHolder.getApplicationContext() == null) {
23-
ContextHolder.setApplicationContext(context.getApplicationContext());
23+
Context aContext = context;
24+
if (context.getApplicationContext() != null) {
25+
aContext = context.getApplicationContext();
26+
}
27+
28+
ContextHolder.setApplicationContext(aContext);
2429
}
2530

2631
if (intent.getExtras() == null) {

0 commit comments

Comments
 (0)