【问题标题】:How to make User logout from twitter fabric ios如何从 twitter Fabric ios 中注销用户
【发布时间】:2015-05-11 17:32:59
【问题描述】:

我使用 Twitter 的结构制作了一个基本应用程序,它允许用户在我的应用程序中发推文并提供 Twitter 登录。每件事都按我的意愿工作。

我的应用如何工作

如果用户没有登录推特,我的应用程序允许他登录,如果他登录则直接允许他发推文。

现在重要的部分来了

正如我在许多应用程序中看到的那样,我可以从应用程序中删除我的签名帐户。而且我无法获得任何帮助我实现这一目标的方法。我想允许用户在我的应用程序中随时从 Twitter 注销。

我用谷歌搜索了,但我没有找到任何东西

这是我的代码:

- (IBAction)LogOut:(id)sender
{
    [[Twitter sharedInstance]logOut];
}

- (IBAction)LogMeIn:(id)sender
{
[[Twitter sharedInstance] logInWithCompletion:^
 (TWTRSession *session, NSError *error) {
     if (session) {
         NSLog(@"signed in as %@", [session userName]);
         [LoginButton setTitle:@"LogOut" forState:normal];

     } else {
         NSLog(@"error: %@", [error localizedDescription]);
     }
 }];
}

【问题讨论】:

  • 在 Dory Daniel 回答的 Swift 4.2 中,让 store = Twitter.sharedInstance().sessionStore if let userID = store.session()?.userID { store.logOutUserID(userID) }

标签: ios twitter xcode6 twitter-oauth


【解决方案1】:

这是来自 Foundation 框架的 NSCookie 的问题,我在下面的代码的帮助下解决了这个问题

NSURL *url = [NSURL URLWithString:@"https://api.twitter.com"];
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:url];
for (NSHTTPCookie *cookie in cookies)
{
    [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}

【讨论】:

  • ...不知道为什么这个答案只有 2 个赞成票。这是我发现使用fabric成功退出twitter的唯一解决方案。非常感谢,这很棒
  • 我使用了这段代码,但我仍然无法切换用户。我把它放在后面:[[Twitter sharedInstance] logOut];有什么想法吗?
  • 请查看系统设置 twitter 帐户 是否已注销?如果没有任何用户登录,那么它应该可以正常工作。
  • 这对我有用,但现在看来它不再适用于 iOS 8.1。我不确定它是否从未在 iOS 8.1 上运行过,或者,由于该应用程序现在是使用 iOS 10 SDK 和更新的 Twitter SDK 构建的,所以其他的东西已经改变了......
  • 在哪里使用此代码? [[Twitter sharedInstance] logOut] 之后?
【解决方案2】:

你需要使用下面的代码

[[[Twitter sharedInstance] sessionStore] logOutUserID:USERID];

提供您要注销的用户的用户 ID。

【讨论】:

  • 因为 [[Twitter sharedInstance] logOut]; 将被弃用 - 我认为这应该是公认的答案。
【解决方案3】:

更新:2016 年 5 月 - 框架已更改,因此此答案不再相关。

看到这个答案: https://stackoverflow.com/a/35765833/940709 这个答案: https://stackoverflow.com/a/30916904/940709 代替。

[[[Twitter sharedInstance] sessionStore] logOutUserID:USERID];

【讨论】:

  • 我怎么称呼它.. 文档只给了我 -(void)logout 但没有显示如何使用
  • twitter 对象是一个单例。调用 [[Twitter sharedInstance] logOut];在你的代码中。
  • 当我运行此代码时,什么也没有发生......在我按下登录时注销后显示我已经登录
  • 看起来您在成功登录后将登录按钮更改为注销按钮。您如何将 IBActions 链接到按钮?您可能还需要从按钮中删除 logMeIn 目标,并将 logOut 选择器添加为按钮上的目标。可能更简单的是为您的按钮设置一个 IBAction,然后在按下按钮时检查登录状态。如果他们已注销,则运行登录代码,如果他们已登录,则运行注销代码。
  • 仅供参考,您可以通过调用 twitter 对象的 session 参数来检查用户是否已登录,因此:[[Twitter sharedInstance] session];如果 session 为 nil,则他们没有登录。
【解决方案4】:

这是 Swift 3 的最佳简单答案:

let store = Twitter.sharedInstance().sessionStore
        if let userID = store.session()?.userID {
            store.logOutUserID(userID)
        }

或者您可以使用 Naeem 的答案,但在 store.session 之后添加 ()

【讨论】:

    【解决方案5】:

    来自Twitter Docs 的注销代码:

    目标-C

    TWTRSessionStore *store = [[Twitter sharedInstance] sessionStore];
    NSString *userID = store.session.userID;
    
    [store logOutUserID:userID];
    

    斯威夫特

    let store = Twitter.sharedInstance().sessionStore
    
    if let userID = store.session()?.userID {
      store.logOutUserID(userID)
    }
    

    【讨论】:

      【解决方案6】:

      对于 Swift 试试这个,

      /**
       *  Deletes the local Twitter user session from this app. This will not remove the system Twitter account nor make a network request to invalidate the session.
       *
       *  @param userID ID of the user to log out
       */
      Twitter.sharedInstance().sessionStore.logOutUserID(userId)
      

      【讨论】:

        【解决方案7】:

        首先确保某个用户已登录,然后执行注销。

        NSString *signedInUserID = [TWTRAPIClient clientWithCurrentUser].userID;
        if (signedInUserID) {
           [[Twitter sharedInstance].sessionStore logoutUserID:signedInUserID];
        }
        

        【讨论】:

          【解决方案8】:

          登录时提到方法为 webBasedForceLogin,这样它就不会创建进入 Safari 缓存的条目。

          private func twitterLogin() {
              Twitter.sharedInstance().logIn(withMethods: .webBasedForceLogin, completion: { (session, error) in
                  if let error = error {
                      print(error.localizedDescription)
                  }
          
                  guard let session = session else {
                      return
                  }
          
                  print("success! Welcome \(session.userName).")
                  self.twitterButton.setTitle("TWITTER LOGOUT", for: .normal)
              })
          }
          
          private func twitterLogout() {
              let sessionStore = Twitter.sharedInstance().sessionStore
              if let userID = sessionStore.session()?.userID {
                  sessionStore.logOutUserID(userID)
              }
          
              twitterButton.setTitle("TWITTER LOGIN", for: .normal)
          }
          

          【讨论】:

          • logInwithMethods: 在 Twitter 工具包 3.0 中不可用
          【解决方案9】:

          在下面使用:

          [TWTRSessionStore logout]
          

          已弃用:

          [Twitter logOut] 
          

          已弃用。

          鼓励用户调用 - [TWTRSessionStore logout] 而不是直接在 Twitter 实例上调用此方法。

          【讨论】:

          • 貌似TWTRSessionStore没有方法logout,有文档链接吗?
          • [[[Twitter sharedInstance] sessionStore] logOutUserID:@"xxxxxx"]
          猜你喜欢
          • 2015-11-02
          • 1970-01-01
          • 2015-01-21
          • 2015-06-26
          • 1970-01-01
          • 2015-09-28
          • 2014-07-27
          • 1970-01-01
          • 2012-02-29
          相关资源
          最近更新 更多