如何在fb上发布消息来实现调度事件

时间:2011-12-07 06:10:27

标签: iphone uilocalnotification uiapplicationdelegate uiapplication

我正在创建一个应用程序,我在其中添加了一个用于在您的帐户上发布消息的工具。现在这个设施我正在添加一个事件来安排。在该用户的帮助下,用户可以编写消息并在稍后或特定日期和时间发布。为此,我使用了本地通知事件,该事件由用户在给定日期生成。但问题是,当通知生成时,我已经调用了一个用于在Facebook上发布消息的函数。对于生成通知,我使用了以下代码:

-(IBAction)save{
    NSString *str1=[NSString stringWithFormat:@"%@",txt_date.text];
    NSString *str2=[NSString stringWithFormat:@" %@",txt_time.text];
    str1=[str1 stringByAppendingFormat:str2];
    selected_label.text= str1;
    [[UIApplication sharedApplication] cancelAllLocalNotifications];
    NSDate *today=[NSDate date]; 
    NSDateFormatter* formatter_current = [[[NSDateFormatter alloc] init] autorelease];
    formatter_current.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    //Set the required date format 
    [formatter_current setDateFormat:@"yyyy-MM-dd hh:mm a"]; 

    NSLog(@"current date is =%@",str1); 
    today=[formatter_current dateFromString:str1];
    NSLog(@"current date:-%@",today); 
    UILocalNotification* ln = [[UILocalNotification alloc] init];
    ln.alertBody = @"Wake Up Sid";
    ln.applicationIconBadgeNumber = 1;
    ln.fireDate = today; //[NSDate dateWithTimeIntervalSinceNow:15];
    ln.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    NSLog(@"alarm will activate on%@",today);
    NSDateFormatter* formatter_alarm = [[[NSDateFormatter alloc] init] autorelease];
    NSLocale *uslocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
    [formatter_alarm setLocale:uslocale];
    [uslocale release]; 
    formatter_alarm.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [formatter_alarm setDateFormat:@"hh:mm a"]; 
    NSString *str=[formatter_alarm stringFromDate:today];
    NSLog(@"%@",str);
    ln.alertBody = [NSString stringWithFormat:@"Your first appointment at %@",str];
    ln.soundName = UILocalNotificationDefaultSoundName;
    ln.repeatInterval=NSDayCalendarUnit;
    [[UIApplication sharedApplication] scheduleLocalNotification:ln];
    [ln release];
}

并在appdelegate文件中我将此函数用于接收通知和呼叫后消息功能:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
// Override point for customization after application launch.

    self.viewController=[[demo_social_updatesViewController alloc]initWithNibName:@"demo_social_updatesViewController" bundle:nil];
    nav_controller=[[UINavigationController alloc] initWithRootViewController:self.viewController];
    // Add the view controller's view to the window and display.
    [self.window addSubview:nav_controller.view];
    [self.window makeKeyAndVisible];
    appDelegate_acess_token=[[NSUserDefaults standardUserDefaults] stringForKey:@"access_token"];
      application.applicationIconBadgeNumber = 0;
    // Handle launching from a notification
    UILocalNotification *localNotif =
    [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (localNotif) {
        NSLog(@"Recieved Notification %@",localNotif);
    }
    return YES;
}

- (void)applicationDidEnterBackground:(UIApplication *)application{
    if (application.applicationIconBadgeNumber == 1) {
        BOOL tmp=[Global_Class_parsing post_comment_fb:appDelegate_acess_token uesr_comment:@"testing message111"];
        if(tmp){

            UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"Sucessfully posted to photos & wall!" 
                                                          message:@"Check out your Facebook to see!"
                                                         delegate:nil 
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil] autorelease];
            [av show];

        }
        else{
            UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"error"message:@"Check connection!"
                                                         delegate:nil 
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil] autorelease];
            [av show];
        }
    }

    /*
     Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
     */
}

- (void)applicationWillEnterForeground:(UIApplication *)application{
    /*
     Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
     */
    if (application.applicationIconBadgeNumber == 1) {
        BOOL tmp=[Global_Class_parsing post_comment_fb:appDelegate_acess_token uesr_comment:@"testing message111"];
        if(tmp){

            UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"Sucessfully posted to photos & wall!" 
                                                          message:@"Check out your Facebook to see!"
                                                         delegate:nil 
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil] autorelease];
            [av show];

        }
        else{
            UIAlertView *av = [[[UIAlertView alloc] initWithTitle:@"error"message:@"Check connection!"
                                                         delegate:nil 
                                                cancelButtonTitle:@"OK"
                                                otherButtonTitles:nil] autorelease];
            [av show];
        }
    }
}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateInactive) {
        NSLog(@"Recieved Notification %@",notification);
    } else {
        NSLog(@"Recieved Notification method call.");
    }
}

现在的问题是,当通知生成和applicationbadge编号变为1时,它不会调用任何函数而我的帖子消息函数不会调用。那么我如何解决这个错误?

1 个答案:

答案 0 :(得分:1)

我得到这个问题的解决方案是我有两种方法用post方法实现调度方法一只是使用通知。另一种是使用网络服务。我用过这两个并且运作良好。