2015-08-11 8 views

risposta

11

il codice di lavoro:

-In viewDidLoad:

let content = FBSDKAppInviteContent() 
content.appLinkURL = NSURL(string: "https://test/myapplink") 
content.appInvitePreviewImageURL = NSURL(string: "https://test/myapplink") 
// Old Way, now depreciated : 
//FBSDKAppInviteDialog.showFromViewController(self, withContent: content, delegate: self) 
//New way : 
     FBSDKAppInviteDialog.showFromViewController(self, withContent: content, delegate: self) 
// Do any additional setup after loading the view. 

-In tuo viewController di conformarsi il delegato protocollo:

extension InviteFriendsViewController: FBSDKAppInviteDialogDelegate{ 
    func appInviteDialog(appInviteDialog: FBSDKAppInviteDialog!, didCompleteWithResults results: [NSObject : AnyObject]!) { 
     //TODO 
    } 
    func appInviteDialog(appInviteDialog: FBSDKAppInviteDialog!, didFailWithError error: NSError!) { 
     //TODO 
    } 
} 
+0

Grazie per il codice! –

+1

'//FBSDKAppInviteDialog.showWithContent(content, delegate: self) è ammortizzato // usa showFromViewController invece di quello vecchio. È possibile aggiornare il codice. – fatihyildizhan

+0

C'è un modo per usare SKView come UIViewController così posso usarlo in SpriteKit: FBSDKAppInviteDialog.showFromViewController (self, withContent: content, delegate: self) – Nour

0

soluzione Benobab è perfetto, voglio solo a aggiungo che nel mio caso provo a eseguire FBSDKAppInviteDialog.showFromViewController su viewDidAppear ha funzionato meglio.

6

Facebook Friend invitano a Swift 3.0

Prima di tutto, importare FBSDKCoreKit, FBSDKShareKit e aggiungere delegato FBSDKAppInviteDialogDelegate. Poi, su invito amico clic del pulsante, aggiungere il codice qui sotto:

let inviteDialog:FBSDKAppInviteDialog = FBSDKAppInviteDialog() 
if(inviteDialog.canShow()){ 
    let appLinkUrl:NSURL = NSURL(string: "http://yourwebpage.com")! 
    let previewImageUrl:NSURL = NSURL(string: "http://yourwebpage.com/preview-image.png")! 

    let inviteContent:FBSDKAppInviteContent = FBSDKAppInviteContent() 
    inviteContent.appLinkURL = appLinkUrl as URL! 
    inviteContent.appInvitePreviewImageURL = previewImageUrl as URL! 

    inviteDialog.content = inviteContent 
    inviteDialog.delegate = self 
    inviteDialog.show() 
} 

Quindi, aggiungere metodi indicati di FBSDKAppInviteDialogDelegate:

func appInviteDialog (_ appInviteDialog: FBSDKAppInviteDialog!, didCompleteWithResults results: [AnyHashable : Any]!) { 
    let resultObject = NSDictionary(dictionary: results) 

    if let didCancel = resultObject.value(forKey: "completionGesture") 
    { 
     if (didCancel as AnyObject).caseInsensitiveCompare("Cancel") == ComparisonResult.orderedSame 
     { 
      print("User Canceled invitation dialog") 
     } 
    } 
} 
func appInviteDialog(_ appInviteDialog: FBSDKAppInviteDialog!, didFailWithError error: Error!) { 
    print("Error tool place in appInviteDialog \(error)") 
} 
+0

Sai perché Xcode lo crea quando voglio aggiungere FBSDKAppInviteDialogDelegate: "Can not conforme al protocollo " – Nour

+0

@Nour aggiungi entrambi i metodi di delegato come ho aggiunto nella mia risposta. –

+0

Grazie, non sapevo dove aggiungerli ma alla fine funziona – Nour