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
Odpowiedz
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.
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
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.
należy przyjąć jako poprawną odpowiedź –
Dlaczego powiadomienie "nie było poprawne"? Ty kontrolujesz powiadomienie wysyłane do urządzenia, nie wysyłaj złych powiadomień ... – Doc
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
Po wysłaniu powiadomienia push, określasz token urządzenia, aby określić, które urządzenie ma wysyłać powiadomienie do ... – Doc