iOS)当应用程序是后台时,使用解析推送通知

时间:2015-09-12 05:55:18

标签: ios parse-platform push-notification apple-push-notifications

我为同样的问题看了很多问题和答案。

而我现在知道的是

    当应用程序为后台时,不会调用
  1. 'didReceiveRemoteNotification'。
  2. didReceiveRemoteNotification仅在应用程序处于前台或用户通过点击通知(如果它在后台)来到应用程序时调用。
  3. 应用程序:didFinishLaunchingWithOptions:当用户点击通知打开应用程序时,会调用它。
  4. 我的情况如下:

    1. 我正在使用解析来推送并获得通知。
    2. 当应用程序处于前台并且我正在处理数据并在通知列表中显示警报和列表通知时,我成功收到通知。
    3. 但是当应用程序是后台或被杀时,我无法收到通知。
    4. 但我检查我的应用程序可以获得通知,当我的应用程序是后台或杀死时,我可以根据需要使用Parse的“自定义受众”。 (像其他着名的应用程序一样)
    5. 我想要的是,当我使用Parse的“自定义受众”时,我希望在应用为背景或被杀时获取通知。 但是当我使用Parse的API时,它并不像我想的那样工作。

      现在有什么我想念的吗?

      我的注册码如下:

      - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
      NSLog(@"didReceiveRemoteNotification executed : %@",userInfo);
      NSInteger bettingIDX = [[userInfo objectForKey:@"betting_idx"] integerValue];
      NSString *message = [userInfo objectForKey:@"message"];
      UILocalNotification *notification = [[UILocalNotification alloc] init];
      notification.alertBody = [NSString stringWithFormat:@"%@",message];
      NSUUID *uuid = [NSUUID UUID];
      NSString *notificationKey = [uuid UUIDString];
      AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);
      
      
      [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
      }
      
      - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
      NSLog(@"DeviceToken : %@", deviceToken );
      PFInstallation *currentInstallation = [PFInstallation currentInstallation];
      [currentInstallation setDeviceTokenFromData:deviceToken];
      [currentInstallation saveInBackground];
      }
      
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
      [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
      [[UIApplication sharedApplication] registerForRemoteNotifications];
      
      [Parse setApplicationId:@"applicationID"
                    clientKey:@"clientID"];
      [PFAnalytics trackAppOpenedWithLaunchOptions:launchOptions];
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
      }
      

1 个答案:

答案 0 :(得分:0)

使用方法didFinishLaunchingWithOptions

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.
    if let launchOptions = launchOptions as? [String: AnyObject],
        let userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey] as? [String: String] {

    }

    return true
}

official documentation说明如下:

  

用户点按提醒中的默认按钮或点击(或点击)   应用程序图标如果轻触默认操作按钮(在运行的设备上)   iOS),系统启动应用程序,应用程序调用其委托   application:didFinishLaunchingWithOptions:方法,传入   通知有效载荷(用于远程通知)或   本地通知对象(用于本地通知)。虽然   application:didFinishLaunchingWithOptions:不是最好的地方   处理通知,此时获取有效负载给你   在处理程序方法之前启动更新过程的机会   被称为。