Benim didReceiveRemoteNotification yöntemimi uyguladım. Aktarılan bildirim verileri ile bir görünüm denetleyicisi çalışır ve görüntüler. Bu, uygulama zaten ön planda olduğunda veya arka planda çalışıyorsa çalışır. Ancak, uygulama çalışmadığında ve kullanıcı bir bildirimi tıkladığında, uygulama başlatılır, ancak herhangi bir bildirim alınmamış gibi görünür. Bildirim metin dosyasına yazılmaz ve viewcontroller zorlanmaz.Uygulama ilk kez başlatıldığında didReceiveRemoteNotification çağrısı
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
if (application.applicationState == UIApplicationStateActive)
{
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
NSString *alertMsg = @"";
NSString *badge = @"";
NSString *sound = @"";
NSString *custom = @"";
if([apsInfo objectForKey:@"alert"] != NULL)
{
alertMsg = [apsInfo objectForKey:@"alert"];
}
if([apsInfo objectForKey:@"badge"] != NULL)
{
badge = [apsInfo objectForKey:@"badge"];
}
if([apsInfo objectForKey:@"sound"] != NULL)
{
sound = [apsInfo objectForKey:@"sound"];
}
if([userInfo objectForKey:@"Type"] != NULL)
{
custom = [userInfo objectForKey:@"Type"];
}
// Set your appending text.
NSString *textToAdd = [NSString stringWithFormat:@":%@", alertMsg];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"%@/AccountNotifications.txt", documentsDirectory];
NSString *fileContents = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil];
NSString *textToFile;
if (fileContents == NULL)
{
textToFile = alertMsg;
}
// Here you append new text to the existing one
if (fileContents != NULL)
{
textToFile = [fileContents stringByAppendingString:textToAdd];
}
// Here you save the updated text to that file
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
fileName = [NSString stringWithFormat:@"%@/AccountNotifications.txt", documentsDirectory];
NSString *content = textToFile;
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
NSArray *fileData = [textToFile componentsSeparatedByString:@":"];
NSMutableArray *tableDataFromFile;
tableDataFromFile = [[NSMutableArray alloc] init];
int i = 0;
for (i = 1; i < [fileData count]; i++)
{
[tableDataFromFile addObject:fileData[i]];
}
NotificationViewController *vc = [[NotificationViewController alloc] initWithNibName:@"NotificationViewController" bundle:nil];
vc.tableData = tableDataFromFile;
UIViewController *root = self.mainNavController.topViewController;
NSArray *vcs = [NSArray arrayWithObjects:root, vc, nil];
[self.mainNavController setViewControllers:vcs animated:YES];
}
// app was already in the foreground
else
{
while (done == FALSE)
{
}
NSDictionary *apsInfo = [userInfo objectForKey:@"aps"];
NSString *alertMsg = @"";
NSString *badge = @"";
NSString *sound = @"";
NSString *custom = @"";
if([apsInfo objectForKey:@"alert"] != NULL)
{
alertMsg = [apsInfo objectForKey:@"alert"];
}
if([apsInfo objectForKey:@"badge"] != NULL)
{
badge = [apsInfo objectForKey:@"badge"];
}
if([apsInfo objectForKey:@"sound"] != NULL)
{
sound = [apsInfo objectForKey:@"sound"];
}
if([userInfo objectForKey:@"Type"] != NULL)
{
custom = [userInfo objectForKey:@"Type"];
}
// Set your appending text.
NSString *textToAdd = [NSString stringWithFormat:@":%@", alertMsg];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [NSString stringWithFormat:@"%@/AccountNotifications.txt", documentsDirectory];
NSString *fileContents = [[NSString alloc] initWithContentsOfFile:fileName usedEncoding:nil error:nil];
NSString *textToFile;
if (fileContents == NULL)
{
textToFile = alertMsg;
}
// Here you append new text to the existing one
if (fileContents != NULL)
{
textToFile = [fileContents stringByAppendingString:textToAdd];
}
// Here you save the updated text to that file
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentsDirectory = [paths objectAtIndex:0];
fileName = [NSString stringWithFormat:@"%@/AccountNotifications.txt", documentsDirectory];
NSString *content = textToFile;
[content writeToFile:fileName atomically:NO encoding:NSStringEncodingConversionAllowLossy error:nil];
NSArray *fileData = [textToFile componentsSeparatedByString:@":"];
NSMutableArray *tableDataFromFile;
tableDataFromFile = [[NSMutableArray alloc] init];
int i = 0;
for (i = 1; i < [fileData count]; i++)
{
[tableDataFromFile addObject:fileData[i]];
}
NotificationViewController *vc = [[NotificationViewController alloc] initWithNibName:@"NotificationViewController" bundle:nil];
vc.tableData = tableDataFromFile;
UIViewController *root = self.mainNavController.topViewController;
NSArray *vcs = [NSArray arrayWithObjects:root, vc, nil];
[self.mainNavController setViewControllers:vcs animated:YES];
}
// app was just brought from background to foreground
}
Birisi bu sorunu çözmeme yardımcı olabilir mi? Yapılan boolean, didFinishLaunchingWithOptions tamamlandıktan sonra true değerine ayarlanır. Uygulamanın hiç çalışmadığı sırada bir bildirime basılırsa, bildirim penceresinin bildirimi açmasını ve görüntülemesini istiyorum.
teşekkür ederiz! Bu mükemmel çalıştı. Evet, mantığı çok daha kısa hale getireceğinden, mantığı didReceiveRemoteNotification yönteminden başka bir yönteme taşımak daha iyi olur. –
Rica ederim! – Eran
@Eran Lütfen hızlı kodu sağlayabilir misiniz? – vinbhai4u