我的应用中有一个YouTube播放器,我正在尝试在其上添加Facebook分享按钮,这样用户就可以分享YouTube视频了。
我正在使用Facebook SDK 4.1,并且我已成功实现了登录和共享功能。但是现在如果我需要首先登录并分享链接。
如何合并这两个进程,以便我只有Share按钮,如果用户没有登录则点击此按钮将显示登录视图,如果他有,则链接将被共享。所以我需要以某种方式在分享按钮中调用登录功能。但由于我是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)
}
答案 0 :(得分:0)
当用户未登录但我点击分享按钮时,我完成了这项工作。我加强了FBLogin窗口,当用户成功登录后,我使用此代码分享游戏分数。请注意,此功能仅适用一次(或重新登录后)。
这是FB Framework的委托方法。当用户登录状态发生变化时,它将得到响应。
- (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;
}
}