5

Robię applikację, która używa powiadomień push, obecnie używam przycisków dla powiadomień push. Zastanawiam się, czy istnieje sposób przechwycenia powiadomień odebranych przez aplikację i sprawdzenia powiadomienia przed wyświetleniem powiadomienia na urządzeniu. A jeśli dane w powiadomieniu nie są poprawne, czy w ogóle nie wyświetlasz powiadomienia? Czy to jest możliwe za pomocą programu typu pushbot, czy też muszę zrobić to wszystko sam?Powiadomienie push Interpretacji iOS

+1

Dlaczego powiadomienie "nie było poprawne"? Ty kontrolujesz powiadomienie wysyłane do urządzenia, nie wysyłaj złych powiadomień ... – Doc

+0

Prawidłowe może być złe słowo, ale chcę sprawdzić, czy jest to poprawny "użytkownik" lub urządzenie. Nie chcę, aby wszystkie urządzenia z aplikacją otrzymywały wszystkie powiadomienia. – Uffe

+1

Po wysłaniu powiadomienia push, określasz token urządzenia, aby określić, które urządzenie ma wysyłać powiadomienie do ... – Doc

Odpowiedz

2

Nie można zapobiec wyświetlaniu powiadomienia po jego dotarciu do urządzenia (zakładając, że zawiera ono pole alert w słowniku aps - w przeciwnym razie nie zostanie wyświetlone żadne powiadomienie).

Należy określić na swoim serwerze, jakie powiadomienia powinny być wysyłane na wskazane tokeny urządzeń. Możesz przypisać tokeny urządzeń użytkownikom DB, jeśli wymaga tego twoja funkcja.

Nawet jeśli to, o co prosiłeś, było możliwe, wysyłanie powiadomień na wszystkie urządzenia, które zainstalowały Twoją aplikację, byłoby bardzo nieefektywne, a następnie wyświetlanie powiadomienia tylko w niewielkim ich podzbiorze.

+0

Udaje mi się to zrobić, używając zamiast tego Aliasu, podobnie do tokenu urządzenia, ale na każdym urządzeniu można ustawić konkretny Alias ​​dla tego użytkownika. – Uffe

16

Tak, możesz osiągnąć to zachowanie, bawiąc się lokalnymi powiadomieniami.

Możesz skonfigurować swoją ładowność bez aplikacji alert i "content-available": "1", aby Twoja aplikacja mogła otrzymywać powiadomienia bez pokazywania ich użytkownikowi.

// Payload 
{ 
    aps: { 
     "content-available": 1 
    }, 
    text: 'my alert message' // your custom info 
} 

I w kodzie aplikacji, zarejestruj powiadomienia jako

// Register notifications 
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
UIRemoteNotificationTypeNewsstandContentAvailability]; 

Następnie klucz do uruchomienia lokalnych powiadomień w metodzie application:didReceiveRemoteNotification:fetchCompletionHandler: na podstawie pewnego stanu

- (void)application:(UIApplication *)application didReceiveRemoteNotification: (NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 

    NSLog(@"push data package: %@", userInfo); 

    // Retrieve your data   
    NSString *text = [userInfo objectForKey:@"text"]; 

    BOOL mustShow = YES; 
    // Only show notification if app is background and your custom condition 
    if ((state == UIApplicationStateInactive || state == UIApplicationStateBackground) 
     && mustShow) { 
     // Raise the local notification a second after received 
     UILocalNotification* localNotification = [[UILocalNotification alloc] init]; 
     localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1]; 
     localNotification.alertBody = text; 
     localNotification.timeZone = [NSTimeZone defaultTimeZone]; 
     localNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + 1; 

     [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 
    } 
} 

ten sposób może "przechwycić" powiadomienia przed "wyświetleniem" ich użytkownikowi.

+0

należy przyjąć jako poprawną odpowiedź –