Ios FBSDKAccessToken.currentAccessToken()每次都发现为零
我将facebook集成到我的应用程序中。但在登录FBSDKAccessToken.currentAccessToken()后发现为零 这是我的密码:Ios FBSDKAccessToken.currentAccessToken()每次都发现为零,ios,swift,facebook,swift2,facebook-ios-sdk,Ios,Swift,Facebook,Swift2,Facebook Ios Sdk,我将facebook集成到我的应用程序中。但在登录FBSDKAccessToken.currentAccessToken()后发现为零 这是我的密码: override func viewDidLoad() { if (FBSDKAccessToken.currentAccessToken() != nil) { print("Not loggedin...") } else { print("logged in...")
override func viewDidLoad() {
if (FBSDKAccessToken.currentAccessToken() != nil)
{
print("Not loggedin...")
}
else
{
print("logged in...")
}
loginbutton.delegate = self
loginbutton.readPermissions = ["public_profile", "email", "user_friends"]
}
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
if(error == nil)
{
print("login complete")
print(result)
print(result.grantedPermissions)
}
else{
print(error.localizedDescription)
}
if let userToken = result.token
{
let token:FBSDKAccessToken = result.token
print("TOKEN = \(FBSDKAccessToken.currentAccessToken().tokenString)")
print("User ID = \(FBSDKAccessToken.currentAccessToken().userID)")
}
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"name, email"])
graphRequest.startWithCompletionHandler({ (connection, result, error) -> Void in
if ((error) != nil)
{
// Process error
print("Error: \(error)")
}
else
{
print("fetched user: \(result)")
let userEmail : NSString = result.valueForKey("email") as! NSString
print("User Email is: \(userEmail)")
let userName : NSString = result.valueForKey("name") as! NSString
print("User Name is: \(userName)")
}
})
}
func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
print("User Logged Out")
}
登录后,我会看到一个空白屏幕。它会打印登录成功消息,但不会进入以下内容:
if let userToken = result.token
{
let token:FBSDKAccessToken = result.token
print("TOKEN = \(FBSDKAccessToken.currentAccessToken().tokenString)")
print("User ID = \(FBSDKAccessToken.currentAccessToken().userID)")
}
所以,我没有得到任何代币。当它打印电子邮件时,它会显示此错误:
这是我在appdelegate中的代码
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
return FBSDKApplicationDelegate.sharedInstance().application(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation)
}
func applicationDidBecomeActive(application: UIApplication) {
FBSDKAppEvents.activateApp()
}
func application(application: UIApplication,
openURL url: NSURL, options options: [String: AnyObject]) -> Bool {
return GIDSignIn.sharedInstance().handleURL(url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey]! as! String,
annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
事实上,每次它被称为gmail集成的openurl方法,那么我怎样才能把条件设置为调用facebook集成的方法呢
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 you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email")
{
// Do work
self.returnUserData()
}
}
}
调用此方法以获取用户电子邮件id
func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters:["fields":"name,email,first_name,last_name"])
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 application(application: UIApplication,
openURL url: NSURL, options options: [String: AnyObject]) -> Bool {
return GIDSignIn.sharedInstance().handleURL(url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey]! as! String,
annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
更改此方法的实现
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool {
if url.scheme == "fbxxxxx"
{
//xxxxx is your APP ID
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}else if url.scheme == "com.googleusercontent.apps.xxxxxx"
{
// string is reverse client ID
return GIDSignIn.sharedInstance().handleURL(url,
sourceApplication: sourceApplication,
annotation: annotation)
}
}
在代码中做以下更改,它将起作用
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 you ask for multiple permissions at once, you
// should check if specific permissions missing
if result.grantedPermissions.contains("email")
{
// Do work
self.returnUserData()
}
}
}
调用此方法以获取用户电子邮件id
func returnUserData()
{
let graphRequest : FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters:["fields":"name,email,first_name,last_name"])
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 application(application: UIApplication,
openURL url: NSURL, options options: [String: AnyObject]) -> Bool {
return GIDSignIn.sharedInstance().handleURL(url,
sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey]! as! String,
annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
更改此方法的实现
func application(application: UIApplication,
openURL url: NSURL,
sourceApplication: String?,
annotation: AnyObject?) -> Bool {
if url.scheme == "fbxxxxx"
{
//xxxxx is your APP ID
return FBSDKApplicationDelegate.sharedInstance().application(
application,
openURL: url,
sourceApplication: sourceApplication,
annotation: annotation)
}else if url.scheme == "com.googleusercontent.apps.xxxxxx"
{
// string is reverse client ID
return GIDSignIn.sharedInstance().handleURL(url,
sourceApplication: sourceApplication,
annotation: annotation)
}
}
var fbAccessToken=FBSDKAccessToken.currentAccessToken().tokenStringi未获得此FBSDKAccessToken.currentAccessToken().userID的激发错误。描述:result=@Umavar fbAccessToken=FBSDKAccessToken.currentAccessToken().tokenStringi未获取此FBSDKAccessToken.currentAccessToken().userID的激发错误。description:result=@uma最主要的是我得到的结果是nil@Rohit它是否被调用?hello@Rohit实际上我也在那个页面上集成了gmail,所以它调用了gmail的openurl方法。这是y它在facebook上返回零请阅读我的更新问题并建议我解决方案谢谢@Rohit我只是在swift中转换了代码,它的效果非常好。在获取电子邮件时,仍将导致其崩溃。此处是我的响应获取用户:{id=1041870089206230;name=“Govind Rakholiya”}用户名是:Govind Rakholiya在下一行它崩溃了,我没有收到电子邮件主要的是我得到的结果是nil@rohitis它是否被调用?hello@Rohit事实上我也在那个页面上集成了gmail,所以它调用了gmail的openurl方法。这是y它在facebook上返回零请阅读我的更新问题并建议我解决方案谢谢@Rohit我只是在swift中转换了代码,它的效果非常好。继续向上投票,但它仍然崩溃,而获取电子邮件这里是我的回复获取用户:{id=1041870089206230;name=“Govind Rakholiya”}用户名是:Govind Rakholiya在下一行它崩溃了,我没有收到电子邮件