Search code examples
javaioslibgdxrobovm

Robovm Local notifications not showing up. Scheduling seems successful. Am I missing something?


I am trying to get local/scheduled notifications working. With push messages (using Parse) working fine I though local would be easy, but even though the registration seems to go fine (didRegisterUserNotificationSettings is fired) and the scheduling seems to work too, the notification does not show up. I have tested on iOS 7 (iphone 4) and iOS 9 (iphone simulator). What am I missing?

here is my code:

@Override
public boolean didFinishLaunching(UIApplication application,UIApplicationLaunchOptions launchOptions)    
{
 boolean retval = super.didFinishLaunching(application, launchOptions);
 //some other stuff happens here regarding parse push. But since this works I have cut it out
 registerForPush();
 return retval;

}


public void registerForPush()
{
 if (IOSLauncher.getOSMajorVersion() >= 8)
 {
 UIUserNotificationType userNotificationTypes = UIUserNotificationType.with(UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound);


 UIUserNotificationSettings settings = new UIUserNotificationSettings(userNotificationTypes, null);
 application.registerUserNotificationSettings(settings);
 application.registerForRemoteNotifications();
 }
 else
 {
 UIRemoteNotificationType type = UIRemoteNotificationType.with(UIRemoteNotificationType.Alert, UIRemoteNotificationType.Badge, UIRemoteNotificationType.Sound);
 application.registerForRemoteNotificationTypes(type);
 }
}


public void scheduleNotification(String title, String text, Date date, int ID)
{
    UILocalNotification notification = new UILocalNotification();
    if(getOSMajorVersion() >= 8 && getOSMinorVersion() >= 2)
    notification.setAlertTitle(title);
    notification.setAlertBody(text);
    notification.setFireDate(new NSDate(date));
 NSMutableDictionary<NSObject, NSObject> dict = new NSMutableDictionary<>();
 dict.put("id",NSNumber.valueOf(ID));
 notification.setUserInfo(dict);
    UIApplication.getSharedApplication().scheduleLocalNotification(notification);
}

Edit: After settting the notification it is present in the array returned by:

UIApplication.getSharedApplication.getScheduledLocalNotifications();

Solution

  • The problem was resolved after Adding:

    notification.setTimeZone(NSTimeZone.getLocalTimeZone());
    

    and setting the expire time of my test timer from 1 minute to 5 minutes I'm not sure which is the actual solution, but the problem is gone, so I'm happy!

    EDIT:

    UILocalNotification notification = new UILocalNotification();
    notification.setAlertTitle("title");
    notification.setAlertBody("text");
    
    NSMutableDictionary<NSObject, NSObject> dict = new NSMutableDictionary<>();
    //add any customer stuff to your dictionary here
    notification.setUserInfo(dict);
    notification.setFireDate(new NSDate(date));         //date is some date in the future. Make sure it is in the correct TZ. If it does not work, try to make it at least 5 minutes in the future. I remember this helping my situation
    notification.setTimeZone(NSTimeZone.getLocalTimeZone());
    UIApplication.getSharedApplication().scheduleLocalNotification(notification);