Facebook sharing with SLComposeViewController: Pre

2019-04-12 03:17发布

问题:

I have implemented Facebook sharing in my app (iOS6) and the code is as follows.

//Completion Handler

SLComposeViewControllerCompletionHandler __block completionHandler = ^(SLComposeViewControllerResult result) {
    UIAlertView *alert = nil;
    switch(result) {
        case SLComposeViewControllerResultCancelled: {
            alert = [UIAlertView alloc]initWithTitle:@"Cancelled" message:@"Your message wasn't shared" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }
        break;
        case SLComposeViewControllerResultDone: {
            alert = [UIAlertView alloc]initWithTitle:@"Posted" message:@"Your message was posted successfully" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }
        break;
    }
}

// Posting to Facebook

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {
    SLComposeViewController *fbVC = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    fbVC.completionHandler = completionHandler;
    [self presentViewController:fbVC animated:YES completion:nil];
}

I am testing the following situations:

  1. Internet available and user entered text and pressed post
  2. Internet available and user entered text and pressed cancel
  3. Internet not available and user entered text and pressed post.

First two works as they should. In the third situation, as expected, I get alert

"Cannot Post to Facebook" - The post cannot be sent because connection to Facebook failed.

But after I press either Try Again or Cancel button in the alert view that was presented to me, I get "Posted" alert (the completion handler type SLComposeViewControllerResultDone gets executed).

How to prevent this?

回答1:

Please check If you are adding URl to It(SLComposeViewController), it must be http://www.stackoverflow.com formatted otherwise it will keep showing "Cannot Post to Facebook" - The post cannot be sent because connection to Facebook failed.

HTH



回答2:

EDIT: Well, it was simple to fix the third situation. I added the reachability class provided by Apple (available for download here.) Only code that was required is as follows:

#import "Reachability.h"

- (BOOL)internetConnected {
    Reachability *reachability = [Reachability reachabilityForInternetConnection];
    NetworkStatus networkStatus = [reachability currentReachabilityStatus];
    return !(networkStatus == NotReachable || reachability.connectionRequired); //required for iOS 7 and above
}

... 
...

case SLComposeViewControllerResultDone: {
    if(self.internetConnected) {
        alert = [UIAlertView alloc]initWithTitle:@"Posted" message:@"Your message was posted successfully" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    } else {
        alert = [UIAlertView alloc]initWithTitle:@"Failed" message:@"Your message was not posted, no internet was available" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    }
break;


标签: facebook ios6