2

我想知道是否可以使用 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

4 回答 4

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);
    }];
于 2012-10-09T21:19:48.173 回答
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");
}
于 2012-12-15T04:31:47.380 回答
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 ?? "")")
            }
        }
    }
于 2017-08-09T06:49:51.010 回答
-1

这在 facebook-ios-sdk 3.0 中是可能的。 这里

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

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

                              }
                      }];

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

于 2012-09-24T23:15:19.573 回答