- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我在使用 Firebase UI 在我的应用程序上登录 Twitter 时遇到问题。
我已经设置了google、facebook和twitter。google 和 facebook 运作良好。
但是推特不行。
当我点击使用 Twitter 登录时,它会打开 Twitter 应用程序并显示此屏幕。
但是,在我点击连接按钮并返回我正在创建的应用程序之后,没有任何反应。
我现在的代码是这样的:
import UIKit
import Firebase
import FirebaseAuthUI
import FirebaseGoogleAuthUI
import FirebaseFacebookAuthUI
import FirebaseTwitterAuthUI
import FirebaseDatabaseUI
import TwitterKit
class WelcomeViewController: UIViewController {
var authUI: FUIAuth { get { return FUIAuth.defaultAuthUI()!}}
let providers: [FUIAuthProvider] = [FUIGoogleAuth(),FUITwitterAuth(),
FUIFacebookAuth()]
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
}
@IBAction func startButtonTapped(_ sender: Any) {
checkLoggedIn()
}
func authUI(_ authUI: FUIAuth, didSignInWith user: User?, error: Error?) {
if user != nil {
self.performSegue(withIdentifier: "toNewUser", sender: nil)
}
}
}
extension WelcomeViewController: FUIAuthDelegate {
func checkLoggedIn() {
self.setupLogin()
Auth.auth().addStateDidChangeListener{auth, user in
if user != nil{
print("success")
self.performSegue(withIdentifier: "toNewUser", sender: nil)
} else {
print("fail")
self.login()
}
}
}
func setupLogin() {
authUI.delegate = self
authUI.providers = providers
authUI.isSignInWithEmailHidden = true
}
func login() {
let authViewController = authUI.authViewController()
self.present(authViewController, animated: true, completion: nil)
}
}
控制台日志是这样的:
2018-11-04 14:49:28.269684+0900 ciel[8190:2052631] [BoringSSL] nw_protocol_boringssl_error(1584) [C13.1:2][0x104715070] Lower protocol stack error: 53
2018-11-04 14:49:28.272673+0900 ciel[8190:2052631] TIC Read Status [13:0x283b98a80]: 1:53
2018-11-04 14:49:28.272744+0900 ciel[8190:2052631] TIC Read Status [13:0x283b98a80]: 1:53
我检查了 AppDelegate 和 info.plist 中的 TWTRTwitter.sharedInstance().start()。我错了什么?
我意识到的一件事是,只有当我点击 Twitter 时,它会打开 Twitter iOS 应用程序,但其他 2 个会打开浏览器。
最佳答案
您好,将下面的建议添加到您的文件中
在 plist 文件中
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>twitterkit-yourConsumerKey</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>twitter</string>
<string>twitterauth</string>
</array><key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>twitterkit-yourConsumerKey</string>
</array>
</dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
<string>twitter</string>
<string>twitterauth</string>
</array>
在 AppDelegate 中
import TwitterKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions
launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
TWTRTwitter.sharedInstance().start(withConsumerKey:”yourConsumerKey”,
consumerSecret:”yourSecretKey”)
return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
TWTRTwitter.sharedInstance().application(app, open: url, options: options)
return true
}
在您的登录屏幕中
import TwitterKit
btn_Twitter.addTarget(self, action: #selector(loginWithTwitter), for: .touchUpInside)
func loginWithTwitter(){
TWTRTwitter.sharedInstance().logIn(completion: { (session, error) in
if (session != nil) {
print("signed in as \(session?.userName ?? "")");
self.getEmailAddress(session:session!)
} else {
print("error: \(error?.localizedDescription ?? "")");
}
})
}
func getEmailAddress(session:TWTRSession){
var theTwitterID:String = "No Email"
let client = TWTRAPIClient.withCurrentUser()
let request = client.urlRequest(withMethod: "GET",
urlString: "https://api.twitter.com/1.1/account/verify_credentials.json",
parameters: ["include_email": "true", "skip_status": "true"],
error: nil)
client.sendTwitterRequest(request, completion: { (response, data, connectionError) in
if (connectionError == nil) {
do{
let json = try JSONSerialization.jsonObject(with: data!, options: [])
print("Json response: ", json)
let myDict:NSDictionary = json as! NSDictionary
print(myDict.value(forKey: "name") ?? "")
let screenName:String = myDict.value(forKey: "screen_name") as! String;
let fullName:String = myDict.value(forKey: "name") as! String
let picture:String = myDict.value(forKey: "profile_image_url") as! String
if let emailId:String = myDict.value(forKey: "email") as? String{
print("Twitter Email: \(emailId)")
print("Twitter Screen Name: \(screenName)")
print("Twitter Full Name: \(fullName)")
print("Twitter Picture: \(picture)")
theTwitterID = screenName
let fullNameArr = fullName.characters.split{$0 == " "}.map(String.init)
let firstName: String = fullNameArr[0]
let lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil
print("Twitter FirstName: \(firstName)")
print("Twitter LastName: \(lastName!)")
}else{
print("Error getting your email id. Please check permission for Twitter.")
}
}catch{
}
}else {
print("Error: \(connectionError!)")
}
})
}
关于ios - swift4 Firebase UI 身份验证不适用于 twitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53138151/
情况我想使用 ui-date 在我的应用程序中设置/编辑日期。我使用最新稳定版本的 Angular、Angular-UI、JQuery-UI 等。 问题一旦使用日期选择器选择了日期,我的模型中的日期将
编辑: jQuery UI 可选择小部件内置了一个回调,stop,我需要知道如何以编程方式触发此事件。 (措辞不佳)我已将事件监听器附加到 jQuery UI Selectable Widget 。如
我正在尝试建立一个下一个JS与尾风用户界面提供的反应组件的网络应用程序。顺风用户界面是在幕后使用无头用户界面。。默认情况下,Next JS将构建服务器端组件,除非您在页面顶部添加“使用客户端”。不幸的
我正在尝试建立一个下一个JS与尾风用户界面提供的反应组件的网络应用程序。顺风用户界面是在幕后使用无头用户界面。。默认情况下,Next JS将构建服务器端组件,除非您在页面顶部添加“使用客户端”。不幸的
我正在尝试应用这个 SlickGrid 示例: http://mleibman.github.com/SlickGrid/examples/example4-model.html 到我自己的网络项目。
我想整理我的 Schemas为我的实体类生成,DTO 类位于 Springdoc ui . 我可以对 tags 进行排序和 operations通过以下配置 yml文件,但我的模式不是按排序顺序排列的
有谁知道阻止 ui-sref 重新加载状态的方法吗? 我无法通过“$stateChangeStart”事件执行此操作,因为 ui-sref 仅更改参数而不更改状态名称。 我的左边是书单,左边是书的详细
我正在 jquery ui 对话框中使用 jquery ui 自动完成小部件。当我输入搜索文本时,文本框缩进(ui-autocomplet-loading)但不显示任何建议。 var availabl
我正在尝试将 Kendo UI MVVM 框架与 Kendo UI 拖放机制结合使用;但我很难找到如何将数据从 draggable 对象中删除。 我的代码是这样的...... var viewMode
Kendo UI Web 和 Kendo UI Core 之间有什么区别 https://www.nuget.org/packages/KendoUIWeb http://www.nuget.org/
我正在尝试将 Kendo UI MVVM 框架与 Kendo UI 拖放机制结合使用;但是我很难找到如何从 draggable 对象中删除数据。 我的代码是这样的…… var viewModel =
使用 Angular JS - UI 路由器,我需要从我的父 View project.details 到我的 subview project.details.tasks 进行通信。我的 subvie
KendoUI 版本 2013.3.1119使用 Kendo MVVM 我有一个我构建的颜色选择器,它使用平面颜色选择器和使用调色板的颜色选择器。它们都可以正常运行,但平面颜色选择器的布局已关闭, s
我在非 UI 线程上,我需要创建并显示一个 SaveDialog。但是当我尝试显示它时:.ShowDialog() 我得到: "An unhandled exception of type 'Syst
我正在试验 jquery-ui 并查看和克隆一些示例。在一个示例(自动完成的组合框)中,我看到一个带有 ui-widget 类的 anchor (a) 元素,它与包含的 css 文件中的 .ui-wi
我需要返回一个 UI 列表,我用这个方法: getList(): Observable { return this.httpClient.get("/api/listui").pipe
我有 ui-grids在 angular-ui-tabs ,它们位于 ng-if 中以避免呈现问题。如果有更多数据并且网格进入滚动模式,则单击选项卡时数据会完全消失。我相信这是一个 ui-grids-
这似乎是一个通用的问题,与其他几个 React 开源框架相比,我真的很喜欢 Material ui 的可扩展性。 问题 “@material-ui/core”和“@material-ui/lab”中的
我有一个根页面(index.html),带有侧边栏(“菜单”)和主要内容 div(“主”),因此有两个 ui-view div - 一个称为“菜单”,一个称为“主”。 当主要内容区域有网站列表 (/s
有人在http://jsfiddle.net/hKYWr/上整理了一个很好的 fiddle 。关于使用 angular-ui 和 jqueryui sortable 来获得良好的可排序效果。 如何在两
我是一名优秀的程序员,十分优秀!