BackGround应用程序刷新和苹果推送通知。

时间:2014-05-29 09:58:28

标签: ios objective-c apple-push-notifications

在我的应用程序中,我正在使用APNS。当应用程序正在运行并处于前台状态时,我收到推送通知。当我按下主页按钮时,我无法接收推送通知。 我需要帮助有两个原因

  1. 当我的应用处于后台状态时如何获得推送通知?
  2. 如果我的应用未运行或未启动且推送通知出现,我想在后台更新数据而无需用户点击。
  3. 如果你能给我一个简短的教程,我将非常感激。提前致谢

    我的代码是:

    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
    
    if(application.applicationState == UIApplicationStateActive)
    {
        NSLog(@"Active");
        [self addData];
    }
    else
    {
        NSLog(@"Not active");
        [self addData];
    }
    
    }
    

1 个答案:

答案 0 :(得分:0)

请按照步骤

首先,您需要在appdelegate中注册推送通知

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
         (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound |   UIRemoteNotificationTypeAlert)];

现在检查通知的启动选项。

NSDictionary* dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
if (dictionary != nil)
{}

现在保存通知的令牌ID并发送到服务器

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken
{
    NSString* deviceT = [[[[deviceToken description]
                           stringByReplacingOccurrencesOfString: @"<" withString: @""]
                          stringByReplacingOccurrencesOfString: @">" withString: @""]
                         stringByReplacingOccurrencesOfString: @" " withString: @""];
    [UserDefault setDeviceToken:deviceT];
}
- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error
{
}

现在在设备设置中检查通知中心您的应用程序是否存在。如果您的应用程序不在列表中,那么您将不会收到通知。如果您的应用程序是后台,则始终会发送推送您可以先检查设备设置 - 通知中心 - 您的应用可用性。

- (void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo
{
   if(app.applicationIconBadgeNumber!=0)
   {
        app.applicationIconBadgeNumber = app.applicationIconBadgeNumber - 1;
    }
if (app.applicationState == UIApplicationStateInactive)
    {

    }
    else if (app.applicationState == UIApplicationStateActive)
    {

        [self showNotificationInActiveMode:userInfo.alertBody];
    }
}

对于第二点,除非应用程序未运行,否则无法更新数据。如果要更新数据,则必须单击推送通知才能启动或在前台打开应用程序。 如果没有未运行或未启动,则无法更新数据。