IOS通知显示两次默认和我的通知提醒

时间:2016-07-25 05:42:35

标签: ios xcode push-notification apple-push-notifications nsnotificationcenter

我不是iOS程序员所以请耐心等待。我能够获得推送通知,但我在屏幕上收到两条警报。

问题1: - 我正在创建的UIAlertView* alertWindow以下 - 第二个似乎是默认的通知警报窗口。我创建第二个窗口的错误是什么?

问题2:当设备被锁定时,我可以在屏幕上看到通知,但这是默认的通知窗口。我没有看到包含我在didReceiveRemoteNotification中收到的详细信息的通知。

另外,如果有人可以解释if else中的didFinishLaunchingWithOptions阻止,我将不胜感激。我复制粘贴它。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSString *AMAZON_SERVER = @"xxxxxx";

    UIUserNotificationType userNotificationTypes = (UIUserNotificationTypeAlert |
                                                UIUserNotificationTypeBadge |
                                                UIUserNotificationTypeSound);
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:userNotificationTypes
                                                                         categories:nil];
    [application registerUserNotificationSettings:settings];
    [application registerForRemoteNotifications];

    [Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id<ParseMutableClientConfiguration> configuration) {
        configuration.applicationId = APPLICATION_ID;
        configuration.clientKey = CLIENT_KEY;
        configuration.server = AMAZON_SERVER;
    }]];

    [PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];

    [Fabric with:@[[Digits class]]];

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
    {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

    }
    else
    {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
        (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
    }

    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];

    [application registerUserNotificationSettings:settings];
    [application registerForRemoteNotifications];

    if([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"]!=TRUE)
    {
        [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"FirstLaunch"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    //storedevice Type in standardUserDefaults
    [self setDeviceType];
    return YES;
}

- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    [application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    [currentInstallation saveInBackground];
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    [PFPush handlePush:userInfo];
    if ([userInfo objectForKey:@"aps"]) {
        NSMutableDictionary * apsData = [userInfo objectForKey:@"aps"];
        NSString* alert = [apsData objectForKey:@"alert"];
    ...
    ...

        UIAlertView* alertWindow = [[UIAlertView alloc] initWithTitle: alertHeader
                                                    message: message
                                                   delegate: self
                                          cancelButtonTitle: @"OK"
                                          otherButtonTitles: nil];

        [alertWindow show];
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    } else {
        [PFPush handlePush:userInfo];
    }
}

2 个答案:

答案 0 :(得分:1)

 First uninstall the app and try it. It will work fine same problem i am facing.

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


    [Parse initializeWithConfiguration:[ParseClientConfiguration configurationWithBlock:^(id<ParseMutableClientConfiguration> configuration) {
        configuration.applicationId = APPLICATION_ID;
        configuration.clientKey = CLIENT_KEY;
        configuration.server = AMAZON_SERVER;
    }]];

    [PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];

    [Fabric with:@[[Digits class]]];



    if([[NSUserDefaults standardUserDefaults] boolForKey:@"FirstLaunch"]!=TRUE)
    {
        [[NSUserDefaults standardUserDefaults] setBool:FALSE forKey:@"FirstLaunch"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    }
    //storedevice Type in standardUserDefaults
    [self setDeviceType];
       #here i am edited

    if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)])
   {


    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound) categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    [[UIApplication sharedApplication] registerForRemoteNotifications];

}
else
{

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:
     (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];


}



    return YES;
}
// remove the below methods

    - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings {
    [application registerForRemoteNotifications];
}

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // Store the deviceToken in the current installation and save it to Parse.
    PFInstallation *currentInstallation = [PFInstallation currentInstallation];
    [currentInstallation setDeviceTokenFromData:deviceToken];
    [currentInstallation saveInBackground];
}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {
    NSLog(@"Error in registration. Error: %@", err);
}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
    //[PFPush handlePush:userInfo];
    if ([userInfo objectForKey:@"aps"]) {
        NSMutableDictionary * apsData = [userInfo objectForKey:@"aps"];
        NSString* alert = [apsData objectForKey:@"alert"];
    ...
    ...

        UIAlertView* alertWindow = [[UIAlertView alloc] initWithTitle: alertHeader
                                                    message: message
                                                   delegate: self
                                          cancelButtonTitle: @"OK"
                                          otherButtonTitles: nil];

        [alertWindow show];
        AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
    } else {
        [PFPush handlePush:userInfo];
    }
}

答案 1 :(得分:0)

你的if语句说如果你的[UIApplication sharedApplication]实例已经实现了registerUserNotificationSettings:方法,那么它会在阻塞时执行,否则它将执行else阻塞。