Ios 用于Swift的Facebook SDK 4.1。用于共享和登录的单个按钮
我的应用程序中有一个YouTube播放器,我正在尝试在上面添加一个Facebook共享按钮,这样用户就可以共享YouTube视频 我正在使用Facebook SDK 4.1,我已经成功实现了登录和共享功能。但现在,如果我需要首先登录并共享链接 如何合并这两个进程,使我只有共享按钮,如果用户未登录,单击此按钮时,将显示登录视图,如果用户已登录,则链接将被共享。所以我需要在share按钮中调用login函数。但由于我是swift新手,我看不到点击操作在哪里,也看不到我如何在不点击登录按钮的情况下实现登录功能 这是我的密码:Ios 用于Swift的Facebook SDK 4.1。用于共享和登录的单个按钮,ios,facebook,swift,facebook-login,facebook-sdk-4.0,Ios,Facebook,Swift,Facebook Login,Facebook Sdk 4.0,我的应用程序中有一个YouTube播放器,我正在尝试在上面添加一个Facebook共享按钮,这样用户就可以共享YouTube视频 我正在使用Facebook SDK 4.1,我已经成功实现了登录和共享功能。但现在,如果我需要首先登录并共享链接 如何合并这两个进程,使我只有共享按钮,如果用户未登录,单击此按钮时,将显示登录视图,如果用户已登录,则链接将被共享。所以我需要在share按钮中调用login函数。但由于我是swift新手,我看不到点击操作在哪里,也看不到我如何在不点击登录按钮的情况下实现
let contentURL = "https://www.youtube.com/watch?v=jBsPZV14I-k"
let contentURLImage = "http://img.youtube.com/vi/jBsPZV14I-k/0.jpg"
let contentTitle = "sdasfdfsa"
let contentDescription = "asdsadasdasd"
override func viewDidLoad() {
super.viewDidLoad()
if (FBSDKAccessToken.currentAccessToken() != nil)
{
let loginView : FBSDKLoginButton = FBSDKLoginButton()
self.view.addSubview(loginView)
loginView.center = self.view.center
loginView.readPermissions = ["public_profile", "email", "user_friends"]
loginView.delegate = self
self.returnUserData()
self.showShareButtons()
}
else
{
let loginView : FBSDKLoginButton = FBSDKLoginButton()
self.view.addSubview(loginView)
loginView.center = self.view.center
loginView.readPermissions = ["public_profile", "email", "user_friends"]
loginView.delegate = self
}
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
println("User Logged In")
if ((error) != nil)
{
// Process error
}
else if result.isCancelled {
// Handle cancellations
}
else {
if result.grantedPermissions.contains("email")
{
// Do work
}
self.returnUserData()
self.showShareButtons()
}
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
println("User Logged Out")
}
func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: nil)
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
println("Error: \(error)")
}
else
{
println("fetched user: \(result)")
let userName : NSString = result.valueForKey("name") as! NSString
println("User Name is: \(userName)")
let userEmail : NSString = result.valueForKey("email") as! NSString
println("User Email is: \(userEmail)")
}
})
}
func showShareButtons()
{
self.showLinkButton()
}
func showLinkButton()
{
let content : FBSDKShareLinkContent = FBSDKShareLinkContent()
content.contentURL = NSURL(string: self.contentURL)
content.contentTitle = self.contentTitle
content.contentDescription = self.contentDescription
content.imageURL = NSURL(string: self.contentURLImage)
let button : FBSDKShareButton = FBSDKShareButton()
button.shareContent = content
button.frame = CGRectMake((UIScreen.mainScreen().bounds.width - 100) * 0.5, 50, 100, 25)
self.view.addSubview(button)
}
当用户未登录但仍点击共享按钮时,我为共享做了这项工作。我弹出FBLogin窗口,当用户成功登录后,我使用此代码共享游戏分数。请注意,此功能只工作一次(或在重新登录后启用) 这是FB框架的委托方法。当用户登录状态更改时,它将得到响应
- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error
{
if (!error && state == FBSessionStateOpen)
{
//log in
NSUserDefaults *def=[NSUserDefaults standardUserDefaults];
NSArray *arr=[def objectForKey:@"fbShare"];
if (arr.count>0)
{
int score=[[arr objectAtIndex:0]intValue];
int hScore=[[arr objectAtIndex:1]intValue];
int level=[[arr objectAtIndex:2]intValue];
BOOL isArcade=[[arr objectAtIndex:3] boolValue];
ShareScoreFB *share=[[ShareScoreFB alloc]init];
[share shareToFacebookCurrentScore:score andHighScore:hScore forLevel:level forArcade:isArcade];
[def removeObjectForKey:@"fbShare"];
[def synchronize];
}
return;
}
}
你可以把你想分享的东西储存在某处。检查您是否已成功登录,然后发布该事件。我不确定您的意思是将您想要的内容存储在某个位置,因为如果您这样认为,该链接存储在一个变量中。这可能是任何内容,但您需要共享某些内容,并且该内容可能属于其他目标。因此,将其保存在某处(作为文件或对象)意味着“存储您想要共享的内容”在某处(对象或文件)。在这里,它是一个字符串对象。只要在收到响应后检查用户是否成功登录,检索数据,发布并共享。当用户成功登录时,不需要调用共享事件(仅一次)。在下一次加载之前,您不需要更改按钮。当用户重新加载页面或通过任何其他事件时,首先检查用户是否已登录,如果他或她已登录,只需显示共享按钮。谢谢,但我不知道Obj-C上的任何内容,而且据我所知,我以前也实现过类似的功能。我需要以某种方式消失的登录按钮,只有分享按钮总是。如果您登录,共享按钮将始终显示不止一次。但是再次感谢您,您可以从这里存储登录标志的状态。设置共享(或登录)按钮时使用该标志。