Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions com.unity.mobile.notifications/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ All notable changes to this package will be documented in this file.
- [iOS] [[1259811](https://issuetracker.unity3d.com/product/unity/issues/guid/1259811)] Fixed UNITY_USES_REMOTE_NOTIFICATIONS being falsely set to 1 when Mobile Notifications isn't used.
- [Android] [[1271866](https://issuetracker.unity3d.com/product/unity/issues/guid/1271866)] Fixed AndroidReceivedNotificationMainThreadDispatcher allocating a new list on every frame.
- [Editor] [[1254618](https://issuetracker.unity3d.com/product/unity/issues/guid/1254618)] Fixed "SerializedObject target has been destroyed" errors when navigating Mobile Notifications settings.
- [Android] [[1172850](https://issuetracker.unity3d.com/product/unity/issues/guid/1172850)] Fix Android crash when many notifications are scheduled at once.

## [1.3.0] - 2020-06-02

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,11 @@ public class AndroidNotificationCenter
/// </summary>
public static event NotificationReceivedCallback OnNotificationReceived = delegate {};

private static AndroidJavaClass s_NotificationManagerClass;
private static AndroidJavaObject s_NotificationManager;
private static AndroidJavaObject s_NotificationManagerContext;
private static AndroidJavaClass s_UnityPlayer;
private static AndroidJavaObject s_CurrentActivity;
private static bool s_Initialized;

public static bool Initialize()
Expand All @@ -60,15 +64,19 @@ public static bool Initialize()
#if UNITY_EDITOR || !UNITY_ANDROID
s_NotificationManager = null;
s_Initialized = false;
s_NotificationManagerClass = null;
s_NotificationManagerContext = null;
s_UnityPlayer = null;
s_CurrentActivity = null;
#elif UNITY_ANDROID
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
s_UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
s_CurrentActivity = s_UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
var context = s_CurrentActivity.Call<AndroidJavaObject>("getApplicationContext");

AndroidJavaClass managerClass = new AndroidJavaClass("com.unity.androidnotifications.UnityNotificationManager");

s_NotificationManager = managerClass.CallStatic<AndroidJavaObject>("getNotificationManagerImpl", context, activity);
s_NotificationManagerClass = new AndroidJavaClass("com.unity.androidnotifications.UnityNotificationManager");
s_NotificationManager = s_NotificationManagerClass.CallStatic<AndroidJavaObject>("getNotificationManagerImpl", context, s_CurrentActivity);
s_NotificationManager.Call("setNotificationCallback", new NotificationCallback());
s_NotificationManagerContext = s_NotificationManager.Get<AndroidJavaObject>("mContext");

s_Initialized = true;
#endif
Expand Down Expand Up @@ -295,11 +303,7 @@ public static AndroidNotificationIntentData GetLastNotificationIntent()
if (!Initialize())
return null;

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");

var intent = s_CurrentActivity.Call<AndroidJavaObject>("getIntent");
return ParseNotificationIntentData(intent);
}

Expand All @@ -311,11 +315,7 @@ internal static void SendNotification(int id, AndroidNotification notification,
Debug.LogError("Failed to schedule notification, it did not contain a valid FireTime");
}

AndroidJavaClass managerClass =
new AndroidJavaClass("com.unity.androidnotifications.UnityNotificationManager");
AndroidJavaObject context = s_NotificationManager.Get<AndroidJavaObject>("mContext");

AndroidJavaObject notificationIntent = new AndroidJavaObject("android.content.Intent", context, managerClass);
var notificationIntent = new AndroidJavaObject("android.content.Intent", s_NotificationManagerContext, s_NotificationManagerClass);

notificationIntent.Call<AndroidJavaObject>("putExtra", "id", id);
notificationIntent.Call<AndroidJavaObject>("putExtra", "channelID", channelId);
Expand Down