Facebook sdk post on wall on iPhone app

后端 未结 3 450
-上瘾入骨i
-上瘾入骨i 2020-12-25 10:26

I have a problem with implementing Facebook posting on wall in my iPhone application. I installed SDK and linked framework login is working fine. here\'s the code:



        
3条回答
  •  囚心锁ツ
    2020-12-25 10:38

    this code worked for me. First we must

    #import 
    

    then

    @property (strong, nonatomic) FBRequestConnection *requestConnection;
    

    and of course do not forget to synthesize:

    @synthesize requestConnection;
    

    the code itself:

    -(IBAction)likeButtonPressed:(id)sender
    {
        NSLog(@"likeButtonPressed: called");
        // FBSample logic
        // Check to see whether we have already opened a session.
        if (FBSession.activeSession.isOpen)
        {
            // login is integrated with the send button -- so if open, we send
            [self postOnWall];
        }
        else
        {
            [FBSession sessionOpenWithPermissions:[NSArray arrayWithObjects:@"publish_stream", nil]
                                    completionHandler:
                 ^(FBSession *session, 
                   FBSessionState status, 
                   NSError *error)
                {
                     // if login fails for any reason, we alert
                     if (error)
                     {
                         NSLog(@"    login failed");
                         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                                         message:error.localizedDescription
                                                                        delegate:nil
                                                               cancelButtonTitle:@"OK"
                                                               otherButtonTitles:nil];
                         [alert show];
                         // if otherwise we check to see if the session is open, an alternative to
                         // to the FB_ISSESSIONOPENWITHSTATE helper-macro would be to check the isOpen
                         // property of the session object; the macros are useful, however, for more
                         // detailed state checking for FBSession objects
                     }
                     else if (FB_ISSESSIONOPENWITHSTATE(status))
                     {
                         NSLog(@"    sending post on wall request...");
                         // send our requests if we successfully logged in
                         [self postOnWall]; 
                     }
                 }];
        };
    }
    
    - (void)postOnWall
    {
        NSNumber *testMessageIndex=[[NSNumber alloc] init];
        if ([[NSUserDefaults standardUserDefaults] objectForKey:@"testMessageIndex"]==nil)
        {
            testMessageIndex=[NSNumber numberWithInt:100];
        }
        else
        {
            testMessageIndex=[[NSUserDefaults standardUserDefaults] objectForKey:@"testMessageIndex"];
        };
        testMessageIndex=[NSNumber numberWithInt:[testMessageIndex intValue]+1];
        [[NSUserDefaults standardUserDefaults] setObject:testMessageIndex forKey:@"testMessageIndex"];
        [[NSUserDefaults standardUserDefaults] synchronize];
    
        // create the connection object
        FBRequestConnection *newConnection = [[FBRequestConnection alloc] init];
    
        // create a handler block to handle the results of the request for fbid's profile
        FBRequestHandler handler =
        ^(FBRequestConnection *connection, id result, NSError *error) {
            // output the results of the request
            [self requestCompleted:connection forFbID:@"me" result:result error:error];
        };
    
        // create the request object, using the fbid as the graph path
        // as an alternative the request* static methods of the FBRequest class could
        // be used to fetch common requests, such as /me and /me/friends
        NSString *messageString=[NSString stringWithFormat:@"wk test message %i", [testMessageIndex intValue]];
        FBRequest *request=[[FBRequest alloc] initWithSession:FBSession.activeSession graphPath:@"me/feed" parameters:[NSDictionary dictionaryWithObject:messageString forKey:@"message"] HTTPMethod:@"POST"];
    
        // add the request to the connection object, if more than one request is added
        // the connection object will compose the requests as a batch request; whether or
        // not the request is a batch or a singleton, the handler behavior is the same,
        // allowing the application to be dynamic in regards to whether a single or multiple
        // requests are occuring
        [newConnection addRequest:request completionHandler:handler];
    
        // if there's an outstanding connection, just cancel
        [self.requestConnection cancel];
    
        // keep track of our connection, and start it
        self.requestConnection = newConnection;    
        [newConnection start];
    }
    
    // FBSample logic
    // Report any results.  Invoked once for each request we make.
    - (void)requestCompleted:(FBRequestConnection *)connection
                     forFbID:fbID
                      result:(id)result
                       error:(NSError *)error
    {
        NSLog(@"request completed");
    
        // not the completion we were looking for...
        if (self.requestConnection &&
            connection != self.requestConnection)
        {
            NSLog(@"    not the completion we are looking for");
            return;
        }
    
        // clean this up, for posterity
        self.requestConnection = nil;
    
        if (error)
        {
            NSLog(@"    error");
            UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"error" message:error.localizedDescription delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];
            // error contains details about why the request failed
            [alert show];
        }
        else
        {
            NSLog(@"   ok");        
        };
    }
    

提交回复
热议问题