发布到Facebook没有对话框ios 6

时间:2012-09-24 00:51:37

标签: objective-c facebook ios6

我想知道是否可以使用SLComposeViewController在用户的Facebook墙上发布内容但是没有显示共享表/对话框?

以下是我正在使用的代码:

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];

    }

提前致谢。

4 个答案:

答案 0 :(得分:2)

导入社交框架:

#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);
    }];

答案 1 :(得分:1)

在这里我得到了答案,为了将image dataurl一起发布,我们需要添加Social.framework,这个框架在iOS6中可用。

只需在项目中添加Social.framework并添加自爆代码。

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");
}

答案 2 :(得分:1)

在ViewController中添加以下代码并导入框架下方。

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 ?? "")")
            }
        }
    }

答案 3 :(得分:-1)

这可以在facebook-ios-sdk 3.0中实现。 here

我正在使用此代码进行分享。

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

                              }
                      }];

我在用户点击分享按钮时调用此方法,并且没有与用户直接发布到用户墙的对话框。 params是共享包含的参数。