Когда мое приложение работает не и получает Push-уведомление, если я нажимаю на это уведомление, приложение запускается - но тогда он не запрашивает у пользователя установленный Alert-View я спрашивая их, хотят ли они просматривать содержимое Уведомления или нет. Он просто запускается и сидит там.
Push-уведомления работают отлично, когда приложение работает - либо в качестве активного приложения, либо в фоновом режиме, но ничего не работает правильно, когда приложение не работает.
Я попытался вывести NSDictionary launchOptions
в application: didFinishLaunchingWithOptions:
, чтобы увидеть, какую нагрузку он приносит, но он появляется как "(null)". Таким образом, он в основном не содержит ничего, что не имеет смысла, не должно ли оно содержать нагрузку на уведомление?
У кого-нибудь есть идеи, как заставить Push Notifications работать, когда они приходят, когда приложение не работает?
EDIT: здесь код, который я использую в application: didReceiveRemoteNotification
, чтобы посмотреть, что:
if (UIApplicationStateBackground) {
NSLog(@"===========================");
NSLog(@"App was in BACKGROUND...");
}
else if (UIApplicationStateActive == TRUE) {
NSLog(@"===========================");
NSLog(@"App was ACTIVE");
}
else {
[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 99];
UIAlertView *BOOM = [[UIAlertView alloc] initWithTitle:@"BOOM"
message:@"app was INACTIVE"
delegate:self
cancelButtonTitle:@"a-ha!"
otherButtonTitles:nil];
[BOOM show];
NSLog(@"App was NOT ACTIVE");
}
Итак, это должно заботиться обо всех состояниях приложения, но это не так. Push-уведомления работают только при запуске приложения - либо в фоновом режиме, либо на переднем плане...
=============================================== =
UPDATE/EDIT # 2:
в соответствии с предложением "@dianz" (ниже,) я изменил код моего application: didFinishLaunchingWithOptions
, чтобы включить следующее:
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
NSString *json = [localNotif valueForKey:@"data"];
UIAlertView *bam = [[UIAlertView alloc] initWithTitle:@"appDidFinishWithOptions"
message:json
delegate:self
cancelButtonTitle:@"cool"
otherButtonTitles:nil];
[bam show];
}
Это делает поле AlertView отображаемым, но, похоже, нет никакой полезной нагрузки: заголовок AlertView появляется ( "appDidFinishWithOptions" ), но json NSString появляется EMPTY... Будет держать настройку...
======================
EDIT # 3 - теперь он работает почти на 100%
Итак, в didFinishLaunchingWithOptions
:
UILocalNotification *localNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (localNotif) {
// Grab the pushKey:
pushKey = [localNotif valueForKey:@"pushKey"];
// "pushKey" is an NSString declared globally
// The "pushKey" in the "valueForKey" statement is part of my custom JSON Push Notification pay-load.
// The value of pushKey will always be a String, which will be the name of the
// screen I want the App to navigate to. So when a Notification arrives, I go
// through an IF statement and say "if pushKey='specials' then push the
// specialsViewController on, etc.
// Here, I parse the "alert" portion of my JSON Push-Notification:
NSDictionary *tempDict = [localNotif valueForKey:@"aps"];
NSString *pushMessage = [tempDict valueForKey:@"alert"];
// Finally, ask user if they wanna see the Push Notification or Cancel it:
UIAlertView *bam = [[UIAlertView alloc] initWithTitle:@"(from appDidFinishWithOptions)"
message:pushMessage
delegate:self
cancelButtonTitle:@"Cancel"
otherButtonTitles:@"View Info", nil];
[bam show];
}
Затем я реализую метод alertView: clickedButtonAtIndex
, чтобы узнать, что пользователь выбрал в AlertView, и действуйте соответственно.
Это, наряду с логикой didReceiveRemoteNotification
, отлично работает.
ОДНАКО... когда приложение не запущено, и я отправляю ему Push-уведомление, если я НЕ нажимаю на предупреждающее сообщение Push Notification, как только оно поступит, и вместо этого ожидайте его исчезновения (что происходит после например, 3-4 секунды), а затем я нажимаю значок приложения, на котором теперь есть BADGE из 1 - приложение запускается, но я не получаю сообщение Push Notification вообще при его запуске. Он просто сидит там.
Угадайте, мне нужно понять, что перестановка следующая...