user1693199
user1693199

Reputation: 39

post to facebook without dialog ios 6

I am wondering if it's possible to post something on a user's facebook wall using SLComposeViewController but without showing the share sheet/dialog?

Following is the code I am using:

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

        SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

        SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
            if (result == SLComposeViewControllerResultCancelled) {

                NSLog(@"Cancelled");

            } else

            {
                NSLog(@"Done");
            }

            [controller dismissViewControllerAnimated:YES completion:Nil];
        };
        controller.completionHandler =myBlock;

        [controller setInitialText:eventInfoToFacebook];

        [self presentViewController:controller animated:YES completion:Nil];

    }

Thanks in advance.

Upvotes: 2

Views: 2879

Answers (4)

Patrick R
Patrick R

Reputation: 6857

Add below Code in your ViewController and import below framework.

import FBSDKCoreKit
import FBSDKLoginKit
import FBSDKShareKit

@IBAction func btnPostClick(_ sender: Any)
 {
        if (FBSDKAccessToken.current() != nil)
        {
            if FBSDKAccessToken.current().hasGranted("publish_actions"){
                postOnFB()
            }
            else
            {
                let loginManager = FBSDKLoginManager()
                loginManager.logIn(withPublishPermissions: ["publish_actions"], from: self, handler: { (result, error) in
                    if error == nil{
                       self.postOnFB()
                    }
                    else{
                        print(error?.localizedDescription ?? "")
                    }
                })
            }
        }
        else
        {
            let loginManager  = FBSDKLoginManager()
            loginManager.logIn(withPublishPermissions: ["publish_actions"], from: self, handler: { (result, error) in
                if error == nil{
                    self.postOnFB()
                }
            })
        }
    }

 func postOnFB() 
   {
        FBSDKGraphRequest(graphPath: "me/feed", parameters: ["message": "YOUR MESSAGE"], httpMethod: "POST").start { (connection, result, error) in
            if error == nil{
                print("post id \(result ?? "")")
           }
            else{
                print("error is \(error?.localizedDescription ?? "")")
            }
        }
    }

Upvotes: 0

Meenakshi Katal
Meenakshi Katal

Reputation: 87

Here I got the answer, for posting image data and url together we need to add Social.framework, this framework is available in iOS6.

Just add the Social.framework in your project and add the blew code.

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook])
{

    SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

    SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
        if (result == SLComposeViewControllerResultCancelled) {

            NSLog(@"ResultCancelled");

        } else

        {
            NSLog(@"Success");
        }

        [controller dismissViewControllerAnimated:YES completion:Nil];
    };

    controller.completionHandler =myBlock;

    [controller addURL:[NSURL URLWithString:@"https://itunes.apple.com/us/app/social-checkin/id504791401?mt=8"]];

    if (encoded_ImageData == nil) {

        [controller addImage:[UIImage imageNamed:@"No_ImageFound.png"]];

    }
    else
    {

    [controller addImage:[UIImage imageWithData:encoded_ImageData]];

    }

    NSString *businessName;

    //Set business name string to be passed on facebook
    if (m_BusinessNameString == nil || [m_BusinessNameString isEqualToString:@""])
    {
        businessName = @"Business name not specified!";
    }
    else
    {
        businessName = [m_BusinessNameString uppercaseString];
    }

    NSString *nameString = [NSString stringWithFormat:@"CHECKED IN @"];

    //user has checked in with his friends if sc-merchant
    NSString *friendsString;

    if ([checkedFriendsNameArray count] > 0)
    {
        NSMutableString *checkedFriendsTempStr = [[NSMutableString alloc] init];

        for (NSMutableString *checkedStr in checkedFriendsNameArray)
        {

            [checkedFriendsTempStr appendFormat:[NSString stringWithFormat:@"%@,",checkedStr]];

            friendsString = [NSString stringWithFormat:@"WITH %@",checkedFriendsTempStr];
        }
    }
    else

    {
        friendsString = [NSString stringWithFormat:@"WITH NO FRIENDS"];

    }

    NSString *fname= [[NSUserDefaults standardUserDefaults] valueForKey:@"userfname"];
    NSString *lname= [[NSUserDefaults standardUserDefaults] valueForKey:@"userlname"];

    NSString *name=[fname stringByAppendingString:[NSString stringWithFormat:@"%@",lname]];


    NSString *main_TextString =[NSString stringWithFormat:@"%@ \n %@ %@ %@ %@",upperCaseStatusString,name,nameString,businessName,friendsString];

    [controller setInitialText:main_TextString];

    [self presentViewController:controller animated:YES completion:Nil];

}
else{

    NSLog(@"UnAvailable");
}

Upvotes: 1

Blazer
Blazer

Reputation: 14277

Import the Social Framework:

#import <Social/Social.h>

-

if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]) {

        SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];

        SLComposeViewControllerCompletionHandler myBlock = ^(SLComposeViewControllerResult result){
            if (result == SLComposeViewControllerResultCancelled) {

                NSLog(@"Cancelled");

            } else

            {
                NSLog(@"Done");
            }

            [controller dismissViewControllerAnimated:YES completion:Nil];
        };
        controller.completionHandler =myBlock;

        [controller setInitialText:@"Test Post from mobile.safilsunny.com"];
        [controller addURL:[NSURL URLWithString:@"http://www.mobile.safilsunny.com"]];
        [controller addImage:[UIImage imageNamed:@"fb.png"]];

        [self presentViewController:controller animated:YES completion:Nil];

    }
    else{
        NSLog(@"UnAvailable");
    }

}

/

//Deprecated in iOS6

    ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

    [accountStore requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {

        ACAccount *account = [[ACAccount alloc] initWithAccountType:accountType];
        NSLog(@"%@, %@", account.username, account.description);
    }];

Upvotes: 2

meth
meth

Reputation: 1885

this is possible in facebook-ios-sdk 3.0. here

i am making the share with this code.

 [FBRequestConnection startWithGraphPath:@"me/feed"
                             parameters:params
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection,
                                          NSDictionary * result,
                                          NSError *error) {
                          if (error) {
                              NSLog(@"Error: %@", [error localizedDescription]);
                          } else {

                              }
                      }];

i called this method when user clicks share button and there is no dialog with the user it directly post to the users wall. params is parameters that sharing includes.

Upvotes: -1

Related Questions