如何在iOS/Swift中存储和访问Twitter Fabric登录会话?

6

使用以下 Twitter Fabric 代码,我可以通过我的应用程序登录 Twitter:

 let logInButton = TWTRLogInButton(logInCompletion: {
        (session: TWTRSession!, error: NSError!) in
             // play with Twitter session
             if (session != nil) {
                 println("signed in as \(session.userName)");
                 self.TWUsernameLabel.text = "Logged in as @" + session.userName
        } else {
            println("error: \(error.localizedDescription)");
        }
    })

当我点击登录按钮时,它会提示我批准登录,然后登录,或者它知道我已经批准了登录并且自动登录。这个功能非常好用,只需要十分钟就能设置完成。太棒了。
我已经有一个基于电子邮件的登录来访问应用程序。我想将用户登录的Twitter账户存储在同一数据库中,因此当用户使用其电子邮件登录时,我已经知道他们的Twitter账户(如果他们之前已登录),他们不需要再次登录。我之所以使用电子邮件登录是因为Twitter是我的应用程序的重要功能,但不是绝对必需品。
问题在于,我不知道如何在按钮被点击和logInCompletion触发之外访问session,并且我不知道在初始登录/检查使用应用程序时要存储哪些变量。
我已经多次阅读了Twitter Fabric文档,但它没有使用swift编写,所以很难理解。有什么建议吗?谢谢。
3个回答

3
如果目前有一个活动会话,您应该能够像文档所说的那样访问它。
Twitter.sharedInstance().session() 

如果用户未登录,则该方法将返回nil。如果您想知道某人是否已经通过身份验证,请检查该方法是否返回值。


那很简单。谢谢!但在我将其作为解决方案之前,是否有存储某种Twitter信息在我的用户数据库中的必要?我会存储用户名以防万一,但我是从会话/登录角度来考虑的。我应该存储密钥或任何内容吗?(我正在考虑如何存储会话ID,然后将其与计算机上存储的内容进行比较。)可能这个系统是专门设计用于避免这种情况。我不确定。你有什么想法? - Andrew
不,我不会存储它。Twitter已经为我们做了这件事,我相信他们处理得比我们自己实现要更明智。如果会话存在,则他们已登录Twitter。如果不存在,则他们没有。你应该相信他们的API。 - Dare
这正是我想的。再次感谢。 - Andrew
2
实际上正确的答案是Twitter.sharedInstance().sessionStore.session(),因为你可以在设备和应用程序中拥有多个Twitter帐户。 - Benjamin
1
看起来你需要将返回的对象转换为TWTRSession才能获取用户名。这似乎很奇怪。 - ray
请问您能否帮我检查一下我的问题:http://stackoverflow.com/questions/43074159/fabric-twittersession-always-null? - Ne AS

1
Twitter Kit会在用户没有登录(没有会话存在)的情况下自动呈现登录屏幕。但是,在调用任何未来的API之前,请检查会话是否有效。在某些API中,您可能需要传递此会话。
if ([[Twitter sharedInstance] session]) {

        TWTRShareEmailViewController *shareEmailViewController =
        [[TWTRShareEmailViewController alloc]
         initWithCompletion:^(NSString *email, NSError *error) {
             NSLog(@"Email %@ | Error: %@", email, error);
         }];

        [self presentViewController:shareEmailViewController
                           animated:YES
                         completion:nil];
    } else {
        // Handle user not signed in (e.g. attempt to log in or show an alert)
    }
}

你甚至不需要担心存储和管理 access tokenaccess token secret

你是否写过:#import <Fabric/Fabric.h> - NSPratik
不需要添加编号吗? - Ne AS
没有 #import <Twitter/Twitter.h>,怎么办? - Ne AS
它告诉我找不到'Crashlytics/Crashlytics.h'文件,同样的情况也适用于Fabric/Fabric.h。 - Ne AS
请问您能在这里检查一下吗?http://stackoverflow.com/questions/43137640/fabric-check-session - Ne AS
显示剩余3条评论

0

在Swift 4中访问已登录用户会话的authToken、userName或userID的方法是:

Twitter.sharedInstance().logIn(completion: { (session, error) in
     if (session != nil) {
         print(session!.authToken)
         print(session!.userName)
         print(session!.userID)
     } else {
         print(error?.localizedDescription)
     }
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接