2014-12-31 3 views
1

빠른 언어를 사용하여 Facebook에서 이미지를 공유하고 싶습니다. 나는 빠른 언어를 사용하여 이미지를 공유 할 수를 다른 옵션을 사용하지만, 나는이 시도IOS에서 Swift를 사용하여 Facebook에서 이미지를 공유하는 방법

1) How to Share image + text with facebook in swift iOS?

를 사용하지만, 작동하지 않는 시도 목적 C. 를 사용하여 이미지를 공유 할 수 있어요. 나는 시도 내가

import UIKit 

class ViewController: UIViewController,FBLoginViewDelegate { 

    @IBOutlet var imageObj:UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

    @IBAction func btnFBLoginClick(sender: UIButton) { 
     FB.login(self.handleLogin); 
    } 

    func handleLogin(){ 
     println("SUCCESS"); 
     FB.getInfo(); 
    } 

    @IBAction func btnShareclick(sender: UIButton) { 
     FB.shareImage(imageObj) 
    } 

} 
ViewController.swift

Facebook.swift을 복사
import Foundation 
import Social 

let FB = Facebook(); 

class Facebook { 

    var fbSession:FBSession? 

    init(){ 
     self.fbSession = FBSession.activeSession(); 
    } 

    func hasActiveSession() -> Bool{ 
     let fbsessionState = FBSession.activeSession().state; 
     if (fbsessionState == FBSessionState.Open 
      || fbsessionState == FBSessionState.OpenTokenExtended){ 
       self.fbSession = FBSession.activeSession(); 
       return true; 
     } 
     return false; 
    } 

    func login(callback:() -> Void){ 

     let permission = ["publish_actions","email","user_location","user_birthday","user_hometown","user_photos","user_about_me"]; 
     let activeSession = FBSession.activeSession(); 
     let fbsessionState = activeSession.state; 
     var showLoginUI = true; 

     if(fbsessionState == FBSessionState.CreatedTokenLoaded){ 
      showLoginUI = false; 
     } 

     if(fbsessionState != FBSessionState.Open 
      && fbsessionState != FBSessionState.OpenTokenExtended){ 

       FBSession.openActiveSessionWithPublishPermissions(permission, defaultAudience: FBSessionDefaultAudience.Friends, allowLoginUI: showLoginUI, completionHandler: { (session:FBSession!, state:FBSessionState, error:NSError!) -> Void in 

        if(error != nil){ 
         println("Session Error: \(error)"); 
        } 
        self.fbSession = session; 
        // println("Session : \(self.fbSession?.permissions)"); 
        callback(); 

       }) 

//    FBSession.openActiveSessionWithReadPermissions(
//     permission, 
//     allowLoginUI: showLoginUI, 
//     completionHandler: { (session:FBSession!, state:FBSessionState, error:NSError!) in 
// 
//      if(error != nil){ 
//       println("Session Error: \(error)"); 
//      } 
//      self.fbSession = session; 
//      println("Session : \(self.fbSession?.permissions)"); 
//      callback(); 
//       
//     } 
//    ); 
       return; 
     } 

     callback(); 

    } 

    func logout(){ 
     self.fbSession?.closeAndClearTokenInformation(); 
     self.fbSession?.close(); 
    } 

    func getInfo(){ 
     FBRequest.requestForMe()?.startWithCompletionHandler({(connection:FBRequestConnection!, result:AnyObject!, error:NSError!) in 

      if(error != nil){ 
       println("Error Getting ME: \(error)"); 
      } 

      println("\(result)"); 
      var dictData:NSDictionary!=result as? NSDictionary 
     }); 
    } 

    func handleDidBecomeActive(){ 
     FBAppCall.handleDidBecomeActive(); 
    } 

    func shareImage (imageName:UIImageView){ 
     let fbsessionState = FBSession.activeSession().state; 
     if(fbsessionState == FBSessionState.Open) 
     { 
      //var arr : NSArray=NSArray(array: ["publish_actions"]) 
      self.fbSession?.requestNewPublishPermissions(["publish_actions"], defaultAudience:FBSessionDefaultAudience.Friends, completionHandler: { (session:FBSession!, error:NSError!) -> Void in 
       if(error == nil){ 
        var requestConneciton:FBRequestConnection=FBRequestConnection() 
        requestConneciton.errorBehavior=FBRequestConnectionErrorBehavior.None 

        requestConneciton.addRequest(FBRequest(forUploadPhoto:imageName.image)) { (connection:FBRequestConnection!, result:AnyObject!, error:NSError!) -> Void in 
         println("\(error)"); 
         println("\(result)"); 
         //[self showAlert:@"Photo Post" result:result error:error]; 
        } 
        requestConneciton.start() 

       } 
       else if(error.fberrorCategory == FBErrorCategory.UserCancelled){ 
        var alt:UIAlertView!=UIAlertView(title:"Permission denied", message:"Unable to get permission to post", delegate:nil, cancelButtonTitle:"Ok") 
        alt.show() 
       } 

      }) 
     } 
    } 

    func showAlert(msg:NSString!,result:AnyObject,error:NSError!) { 
     var alertTitle:NSString! 
     var alertMsg:NSString!; 
     if (error == nil) { 
      if((error.fberrorUserMessage != nil && FBSession.activeSession().isOpen)) { 
       alertTitle = ""; 
      } 
      else{ 
       // Otherwise, use a general "connection problem" message. 
       alertMsg = "Operation failed due to a connection problem, retry later."; 
      } 
     } 
     else { 
      //var dictResult:NSDictonary = result as NSDictionary 
      alertMsg="Successfully posted " 
      var alertObj:UIAlertView!=UIAlertView(title:"Demo App", message:alertMsg, delegate:nil, cancelButtonTitle:"Ok"); 
      alertObj.show(); 
     } 
    } 

    func performPublishAction(action:() -> Void){ 

     var arrP:NSArray!=NSArray(array: ["publish_actions"]); 

     fbSession?.requestNewPublishPermissions(arrP, defaultAudience:FBSessionDefaultAudience.Friends, completionHandler: { (session:FBSession!, error:NSError!) -> Void in 

      if(error == nil){ 
       action() 
      } 
      else if(error.fberrorCategory == FBErrorCategory.UserCancelled){ 
       var alt:UIAlertView!=UIAlertView(title:"Permission denied", message:"Unable to get permission to post", delegate:nil, cancelButtonTitle:"Ok") 
       alt.show() 
      } 

     }) 
    } 
} 

과에서 Facebook.swift

에 대한 공유 이미지를 내 코드를 다른 함수를 작성

2) https://github.com/rajeshsegu/facebook-ios-swift/tree/master/FBApp

로그인 버튼을 클릭하면 완벽하게 작동하고 로그인 사용자의 모든 데이터를 가져올 수 있지만 FB.shareImae(imageObj)을 사용하여 이미지를 공유하면 나에게 삐 착륙 오류, 나는 지난 2 일간이 시점에서 일하고있다. Objective C에서 같은 코드를 작성하면 잘 동작합니다.

eror :

permissions:(
    "public_profile", 
    email, 
    "user_friends" 
)>, com.facebook.sdk:ParsedJSONResponseKey={ 
    body =  { 
     error =   { 
      code = 200; 
      message = "(#200) Permissions error"; 
      type = OAuthException; 
     }; 
    }; 
    code = 403; 
}} 

이 하나가 나를 도울 수 있습니까? 이 문제를 찾으려면 ...

저는 SLComposeViewController를 사용하고 싶지 않습니다. 저는 Facebook 프레임 워크를 사용하고 싶습니다.

미리 감사드립니다.

+0

, 내 요청은 처음에만 작동 : 이러한 방법의

func performPublishAction(callBack:() -> Void){ self.fbSession?.requestNewPublishPermissions(["publish_actions"], defaultAudience: FBSessionDefaultAudience.Friends, completionHandler: {(session:FBSession!, error:NSError!)->Void in if error == nil { callBack() }else{ println(error) } }) } func shareImage (imageName:UIImage){ var requestConneciton:FBRequestConnection=FBRequestConnection() requestConneciton.errorBehavior=FBRequestConnectionErrorBehavior.None requestConneciton.addRequest(FBRequest(forUploadPhoto:imageName)) { (connection:FBRequestConnection!, result:AnyObject!, error:NSError!) -> Void in println("\(error)"); println("\(result)"); } requestConneciton.start() } 

사용으로 될 것입니다. Facebook SDK에 오류 5가 있습니다 : "엔드 포인트에 대한 요청 오류"/ me/permissions ":이 엔드 포인트에 대한 호출에 대해 열려있는 FBSession을 지정해야합니다 오류 : 작업을 완료 할 수 없습니다 (com.facebook. sdk 오류 5) ". 나는 당신, github 프로젝트와 같은 구조를 사용했습니다. 로그인은 작동하지만 페이스 북에서 링크를 공유 할 수는 없습니다. 이거 해결 했니? –

+0

@MarieDm 나는 아직 이것을 풀 수 없다 :(그러나 나는 그걸 찾으면 아무것도 발견하지 못하면서 공유 할 것이다 ... –

답변

2

이것은 이전 프로젝트에서 만든 코드입니다. 시도해라;)

@IBAction func btn_Share(sender: AnyObject) { 

    let facebookPost = SLComposeViewController(forServiceType: SLServiceTypeFacebook) 
    facebookPost.completionHandler = { 
     result in 
     switch result { 
     case SLComposeViewControllerResult.Cancelled: 
      //Code to deal with it being cancelled 
      break 

     case SLComposeViewControllerResult.Done: 
      //Code here to deal with it being completed 
      break 
     } 
    } 

    facebookPost.setInitialText("Test Facebook") //The default text in the tweet 
    facebookPost.addImage(masked_image) //Add an image 
    facebookPost.addURL(NSURL(string: "http://facebook.com")) //A url which takes you into safari if tapped on 

    self.presentViewController(facebookPost, animated: false, completion: { 
     //Optional completion statement 
    }) 
    }` 
+0

답장을 보내 주셔서 감사합니다. SLComposeViewController를 사용하고 싶지 않습니다. Facebook을 사용하고 싶습니다. .framework –

0

당신은 페이스 북의 앱에서 "publish_actions" 허가를 요청해야한다.

+0

답변을 주셔서 감사합니다. 이미 허가를 받았습니다. –

+0

@SAMIRRATHOD 방금 내 앱과 함께 코드를 시도했는데 작동했습니다. –

+0

동일한 코드가 실제로 작동합니까? –

1

나는 내 문제를 해결했다. (나는 설명하기에 충분한 장소가 없기 때문에 여기에 내 의견을 달았다.) 그래서 페이스 북에서 링크를 공유하려고했습니다. 먼저 나는

var params=["http://www.google.com":"link"] 

하고 올바른 방법으로 작성되었으며, PARAMS 잘못 되었기 때문에 내가 가지고 dev.facebook.com에의 Obj-C로 작성하는 방식 (

var params=["link":"http://www.google.com"] 

입니다 혼란 스러움).

FB.performPublishAction(self.shareLinkOnFB) 

(페이스 북의 클래스) performPublishAction 새로운 게시 권한을 요청 :

func performPublishAction(action:() -> Void){ 
fbSession?.requestNewPublishPermissions(fbSettings.publishPermissions, defaultAudience: fbSettings.publishAudience, completionHandler: {(session:FBSession!, error:NSError!)->Void in 
      if error==nil { 
       println("perform publish action/no error") 
       action() 
      }else{ 
       println("perform publish action/error: \(error.localizedDescription)") 
       println(error) 
      } 
     }) 
내가 원래 GitHub의 프로젝트의 논리를 따르는 경우

둘째, 나는 내 기능이 방법을 호출

shareLinkOnFb 기능은 FB.requestToShareLink() 호출

func shareLinkOnFB(){ 
    FB.requestToShareLink() 
} 

func requestToShareLink(){ 
var params=["link":"\(self.link)", "message":"\(self.message)"] 
FBRequestConnection.startWithGraphPath("/me/feed", parameters:params, HTTPMethod: "POST", completionHandler: { (connection:FBRequestConnection!, result:AnyObject!, error:NSError!) in 
    if error != nil { 
     println("Request to share link/An error occurred: \(error.localizedDescription)") 
     println(error) 
     //handle error 
    }else{ 
     println("link successfully posted: \(result)") 
    } 
    }) 
} 
,536,

같은 문제가 있는지 잘 모르겠지만 도움이되기를 바랍니다.

0

나는 동일한 문제가있었습니다. 나는 그런 코드를 작성함으로써 그것을 해결했다. 활성 Facebook 세션이있는 경우이 코드는 완벽하게 작동합니다. 나는이 같은 문제가

facebookHelper.performPublishAction {() -> Void in 
     facebookHelper.shareImage(self.itemImage) 
     //NkCommonClass.displayToast("Posted successfully on your wall.") 
    } 
+0

FacebookHelper는 위의 두 가지 방법을 포함하는 클래스입니다. performPublishAction shareImage. 이미지를 공유하려면 시도 : facebookH helper.performPublishAction {() -> Void in facebookHelper.shareImage (itemImage) //NkCommonClass.displayToast("벽에 성공적으로 게시되었습니다.") } 벽에 성공적으로 게시합니다. –

관련 문제