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等待某人的帮助。
答案 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”";
希望这有助于你