Получение уведомлений iPhone для вызова моего делегата, когда приложение работает в фоновом режиме - PullRequest
1 голос
/ 08 июля 2011

У меня есть корпоративное приложение, которое я хочу продолжать работать, чтобы оно могло вызывать веб-сервис и информировать пользователя, когда ему нужно что-то сделать.

Итак, теперь оно работает в фоновом режиме.делает вызовы, получает результаты, но информирование пользователя - моя проблема.

Когда я запускаю UILocalNotification, предупреждение не вызывает мой UIAlertDelegate, и я не вижу, как это установитьпредупреждение, чтобы сделать это.

Вот мой код того, как я делаю уведомление, и это на самом деле вызывает предупреждение, но мне нужно, чтобы затем вызвать View, чтобы они могли видеть таблицу,но View, который он открывает, не является одним из двух, которые использует мое приложение.

        UILocalNotification *localNotif = [[UILocalNotification alloc] init];
        if (localNotif) {
            localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"%@ has a message for you.", nil), @"FYR"];
            localNotif.alertAction = NSLocalizedString(@"Read Msg", nil);
            localNotif.soundName = nil;             
            localNotif.applicationIconBadgeNumber = -1;
            NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Your Background Task works", ItemListKey, @"Message from FYR", MessageTitleKey, nil];
            localNotif.userInfo = infoDict;
            [[UIApplication sharedApplication] presentLocalNotificationNow:localNotif];
            [localNotif release];
        }

Кроме того, поэтому я попытался выдать предупреждение, что я могу установить делегата, поэтому в моем контроллере,где я вызываю приведенный выше код, я также называю это:

        [[NSNotificationCenter defaultCenter]  
         postNotificationName:@"ShowAlert"
         object:nil
         userInfo:mydata];

Затем извлекается это уведомление, и в конечном итоге эта функция вызывается, и это работает, но предупреждение не отображается для пользователя,Я ожидаю, потому что это на заднем плане.

- (void) _showAlert:(NSString*)pushmessage withTitle:(NSString*)title {
    NSLog(@"%@", @"Attemping to show alert");
    UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title 
                                                        message:pushmessage
                                                       delegate:self
                                              cancelButtonTitle:@"No"
                                              otherButtonTitles:@"Yes",nil];
    [alertView show];
    if (alertView) {
        [alertView release];
    }
}

В главном делегате у меня есть это определение и соответствующие функции:

@interface FYRViewAppDelegate : NSObject <UIApplicationDelegate, UIAlertViewDelegate> {

я думал, что если я смогу получить предупреждение, которое появляется навызовите этого делегата, тогда он сможет выполнить этот код:

- (void)alertView:(UIAlertView *)alertview clickedButtonAtIndex:(NSInteger)buttonIndex {
    alertview--;
    if (buttonIndex == 0) {
    } else {
        [self.window addSubview:[tableController view]];
    }
}

Итак, есть ли способ заставить UILocalNotification использовать мой делегат для оповещения?

Или есть лиспособ отображения оповещения, когда приложение находится в фоновом режиме?

Или мне нужно написать два приложения, чтобы они взаимодействовали с удаленными уведомлениями, поэтому, когда приложение находится в фоновом режиме, одно запускается, а затемзапускает основное приложение с удаленным уведомлением.Мне не нравится этот подход, так как он кажется очень грязным, но, вероятно, сработает.

Поскольку программа никогда не перестает работать,

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

вызывается только при запускелокальное уведомление никогда не вызывает его, и это также никогда не вызывается:

- (void) application:(UIApplication*)application didReceiveLocalNotification:(UILocalNotification *)localNotification {.

1 Ответ

0 голосов
/ 08 июля 2011

Я полагаю, что вы не публикуете уведомления, когда приложение активно.Не могли бы вы просто установить флаг, когда вы публикуете локальное уведомление, а затем проверить флаг, когда приложение становится активным:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (localNotificationPosted) {
        // Do whatever you need to do.
    }
}

Это, вероятно, будет правильным поведением, поскольку приложение станет активным, еслиПользователь отклоняет уведомление.Даже если пользователь отклоняет уведомление, показ новых сообщений при следующем открытии приложения, вероятно, не является плохой вещью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...