在没有SLCompose或任何形式的对话的情况下与Facebook共享

时间:2015-12-03 04:13:00

标签: ios swift facebook-graph-api

import Foundation
class FacebookShareService {
    private var shareImage : UIImage!
    private var shareDescription : String?

    init(image : UIImage, description : String?) {
        self.shareImage = image
        self.shareDescription = description
    }

    func start() {
        if FBSDKAccessToken.currentAccessToken() != nil && FBSDKAccessToken.currentAccessToken().permissions.contains("publish_actions"){
            self.startShareToFacebook()
        } else {
            getPublishPermission({ (error) -> () in
                let alert = UIAlertView(title: "Error!!!", message: error.domain, delegate: self, cancelButtonTitle: "Close")
                alert.show()
            }, success: { () -> () in
                self.startShareToFacebook()
            })
        }
    }

    private func startShareToFacebook() {
        let dict : NSMutableDictionary = NSMutableDictionary()
        if let des = self.shareDescription
        {
            dict.setValue(des, forKey: "caption")

        }
        dict.setValue(self.shareImage, forKey: "source")
        FBSDKGraphRequest(graphPath: "me/photos", parameters: dict as [NSObject : AnyObject], HTTPMethod: "POST").startWithCompletionHandler { (conn : FBSDKGraphRequestConnection!, response : AnyObject!, error :NSError!) -> Void in
            if error != nil {
                print("Can't use graphApi me/photos")
                let alert = UIAlertView(title: "Error!!!", message: error.domain, delegate: self, cancelButtonTitle: "Close")
                alert.show()
            } else {
                let alert = UIAlertView(title: "", message: "Successful!!!", delegate: self, cancelButtonTitle: "Close")
                alert.show()
            }
        }
    }

    private func getPublishPermission(fail : (error : NSError)->(),success:()->()) {
        let loginManager : FBSDKLoginManager = FBSDKLoginManager()
        loginManager.loginBehavior = FBSDKLoginBehavior.Native
        loginManager.logInWithPublishPermissions(["publish_actions"], handler: { (loginResult:FBSDKLoginManagerLoginResult!, error :NSError!) -> Void in
            if error != nil {
                print("Can't login with permission public_action")
                fail(error: error)
            } else {
                if let result = loginResult {
                    if loginResult.isCancelled {
                        print("Can not get permisson")
                        fail(error: NSError(domain: "Can not get permisson", code: 100000, userInfo: nil))
                    } else {
                        if let permissions = loginResult.grantedPermissions {
                            if permissions.contains("publish_actions") {
                                success()
                            } else {
                                print("Publish actions is not allowed")
                                let error : NSError = NSError(domain: "Publish actions is not allowed", code: 1000, userInfo: nil)
                                fail(error : error)
                            }
                        } else {
                            print("Publish actions is not allowed")
                            let error : NSError = NSError(domain: "Publish actions is not allowed", code: 1000, userInfo: nil)
                            fail(error : error)
                        }
                    }

                } else {
                    print("Can not get permisson")
                    fail(error: NSError(domain: "Can not get permisson", code: 100000, userInfo: nil))
                }
            }
        })

    }
}

以上代码无法使用任何类型的解决方案或需要任何类型的现成源。在此代码中,他们使用旧的SDK并且与新的sdk不兼容。我正在使用最新的ios SDK.Eagerly等待某人的帮助。

1 个答案:

答案 0 :(得分:0)

FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
        [FBSDKProfile enableUpdatesOnAccessTokenChange:YES];
        login.loginBehavior = FBSDKLoginBehaviorSystemAccount;
        [login logInWithPublishPermissions:@[@"publish_actions"]  handler:^(FBSDKLoginManagerLoginResult result, NSError error) {
            if (error){

            } else if (result.isCancelled){

            } else{
                if ([result.grantedPermissions containsObject:@"email"]){
                    if ([FBSDKAccessToken currentAccessToken]){
                        [self funcGetUserFBInfo];
                    }
                }
            }
        }];

分享

FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
                content.contentURL = [NSURL URLWithString:@"http://www.indianic.com/"];
                [FBSDKShareDialog showFromViewController:self withContent:content delegate:self];
                UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
                pasteboard.string = @"“Love only grows by sharing. You can only have more for yourself by giving it away to others”";

希望这有助于你