我试图阅读一些关于这个问题的类似主题。但不幸的是我仍然遇到同样的问题。
所以基本上,我正在尝试使用 Goole Geocode API 将我的纬度经度的地理编码反转为人类可读的地址。
为了更安全,我对我的 iOS 应用程序的 API 密钥给予了更多限制。这是密钥的应用限制
而且我还给出了这样的 API 密钥限制,我确定我已经包含了地理编码 API

但是当我运行应用程序时......我收到错误消息
此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 xxxxxx 收到的请求为空引用
这里出了什么问题?如果限制设置为无,它工作正常
google-maps google-maps-api-3 ios google-geocoder google-cloud-platform
我是编程新手,对不起,如果我的问题很愚蠢。我正在尝试使用Firebase构建iOS应用。
更新到Xcode 9.3后,将显示很多警告,如下图所示:

我想这来自Firebase窗格,也许Firebase尚未更新该窗格。我对吗?
那我该怎么办?我必须手动修复警告还是只需要等待Firebase的更新?并且如果我仍然像这样运行时仍然发出很多警告,程序是否可以正常运行?
这是我用的豆荚
pod 'SwiftyJSON'
pod 'Firebase/Core'
pod 'Firebase/Firestore'
pod 'Firebase/Storage'
pod 'Firebase/Auth'
pod 'SVProgressHUD', :git => 'https://github.com/SVProgressHUD/SVProgressHUD.git'
pod 'GoogleSignIn'
Run Code Online (Sandbox Code Playgroud) 我是编程和iOS开发的新手。我正在尝试使用Firebase中的Firestore数据库制作一个应用程序。我不知道它是否正常,但是当我尝试从Firestore数据库中获取数据时,对我来说似乎太长了。我不知道我是否犯错
这是我的代码,用于从Firestore获取所有城市数据
参考:
import Foundation
import FirebaseFirestore
import Firebase
enum FirestoreCollectionReference {
case users
case events
case cities
private var path : String {
switch self {
case .users : return "users"
case .events : return "events"
case .cities : return "cities"
}
}
func reference () -> CollectionReference {
return Firestore.firestore().collection(path)
}
}
Run Code Online (Sandbox Code Playgroud)
我getAllCitiesDataFromFirestore在CityKM课堂上使用方法来获取存储在Firestore中的城市数据
class CityKM {
var name : String
var coordinate : GeoPoint
init (name: String , coordinate: GeoPoint ) {
self.name = …Run Code Online (Sandbox Code Playgroud) 当我听 Firestore 数据库时,我实际上很困惑删除侦听器的好处。我试图找到文档,但找不到
我通常总是删除viewWillDisappear. 从这里的视频https://www.youtube.com/watch?v=rvxYRm6n_NM据说删除监听器的好处是减少电池和数据使用量,基于此,我认为如果我总是这样做会很好在视图消失之前删除侦听器。
var userListener : ListenerRegistration?
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
// removing listener
guard let userListener = userListener else {return}
userListener.remove()
}
Run Code Online (Sandbox Code Playgroud)
但是当我在这里阅读 Firestore 定价时https://firebase.google.com/docs/firestore/pricing
据说:
此外,如果侦听器断开连接超过 30 分钟(例如,如果用户下线),您将被收取读取费用,就像您发出了一个全新的查询一样。
如果我删除侦听器,它是否与断开连接相同?因为它会影响读取文档的数量。
那么删除侦听器的最佳时间是什么,或者删除侦听器的优缺点是什么?
listener ios firebase firebase-realtime-database google-cloud-firestore
我已经成功地在我使用 Firebase 的应用中实现了一个谷歌登录。当我第一次使用谷歌账户登录时,会出现一个选择谷歌账户的对话框。
但是在我成功登录然后注销后,当我再次尝试登录时,选择谷歌帐户的对话框不再出现,它只是直接将我发送到主菜单。
每次用户通过谷歌登录时,我都希望始终显示该对话框。这是我使用的代码,在我的 VC 中有谷歌登录按钮
import UIKit
import Firebase
import GoogleSignIn
import SVProgressHUD
class AuthenticationVC : UIViewController, GIDSignInUIDelegate, GIDSignInDelegate {
var userID : String?
override func viewDidLoad() {
super.viewDidLoad()
// delegate declaration
GIDSignIn.sharedInstance().uiDelegate = self
// For Google SignIn Using Firebase
GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
GIDSignIn.sharedInstance().delegate = self
}
@IBAction func googleButtonDidPressed(_ sender: Any) {
GIDSignIn.sharedInstance().signIn()
}
}
extension AuthenticationVC {
// MARK: - Firebase Google Sign In Authentication Methods
// The methods below will be triggered if the …Run Code Online (Sandbox Code Playgroud) 几天前,我刚刚将我的firebase pod更新到最新版本,在我的调试区域,我收到消息说我必须从timestamp数据类型更新为Date(类似的东西,我实际上忘了).
我还必须更改数据库设置,如下所示
let db = Firestore.firestore()
let settings = db.settings
settings.areTimestampsInSnapshotsEnabled = true
db.settings = settings
Run Code Online (Sandbox Code Playgroud)
添加上面的代码后,Xcode中我的调试区域中的错误消息消失.
据我所知,我还必须将我的客户端中的数据类型从Timestamp更改为Date数据类型,我没有更改它,因为Xcode中我的调试区域中的错误消息已经消失.
结果,我的应用程序中的日期不正确.
你能再次分享从TimeStamp到Date的转换步骤吗?因为据我记得,我必须采取一些步骤来遵循.我在firebase文档中找不到它.
非常感谢你 :)
我正在使用导航组件,并且在主活动中有一个底部导航视图。当我点击该底部导航视图中的选项卡时,出现该片段时似乎动画淡入了。我认为我没有手动设置动画,似乎默认情况下该动画会存在。
我想删除该动画。这是我在主要活动中使用的代码。
class MainActivity : AppCompatActivity(), NavController.OnDestinationChangedListener {
private lateinit var navController : NavController
lateinit var destinationTitleTextView : TextView
lateinit var progressBar : ProgressBar
lateinit var topToolbar : Toolbar
lateinit var bottomNavigationView : BottomNavigationView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
FirebaseApp.initializeApp(this)
// Initial Setup views
navController = Navigation.findNavController(this,R.id.nav_host_fragment)
setupBottomNavMenu(navController)
setupActionBar(navController)
setUpViewDeclaration()
// Add Listeners
navController.addOnDestinationChangedListener(this)
}
private fun setUpViewDeclaration() {
destinationTitleTextView = findViewById(R.id.destination_label_text_view)
progressBar = findViewById(R.id.progressBar_main_activity)
topToolbar = findViewById(R.id.top_toolbar)
bottomNavigationView = findViewById(R.id.bottom_nav)
}
private fun setupBottomNavMenu(navController: NavController) {
bottom_nav.setupWithNavController(navController) …Run Code Online (Sandbox Code Playgroud) android kotlin android-navigation android-architecture-components android-jetpack
说我有 2 个片段。登录和主页。我将 Home 片段设置为以 userData 作为参数的全局目的地
如果用户还没有登录,那么它将从登录片段开始。登录并从服务器获取 userData 后,它将导航到 Home 并使用此代码传递 userData
val home = AuthenticationFragmentDirections.actionGlobalHomeFragment(userData)
Navigation.findNavController(view).navigate(home, navOptions)
Run Code Online (Sandbox Code Playgroud)
但问题是当用户已经登录并打开应用程序时。在这种情况下,他们将直接打开主页片段。我的应用程序因错误而崩溃
java.lang.IllegalArgumentException:缺少必需的参数“userData”并且没有 android:defaultValue
所以我假设我可以在像User? 这样的参数中设置可为空的数据类型,所以如果 Home 片段不是来自 Login 则不需要 userData
从这里阅读后,我设置了这样的论点来实现User?
<argument
android:name="userData"
android:defaultValue="@null"
app:argType="User"
app:nullable="true" />
Run Code Online (Sandbox Code Playgroud)
但问题是,当我将用户数据从登录片段发送到家时,它说我有太多参数
我在gradle中使用这个
implementation "androidx.navigation:navigation-fragment-ktx:2.3.0-alpha04"
implementation "androidx.navigation:navigation-ui-ktx:2.3.0-alpha04"
Run Code Online (Sandbox Code Playgroud) android android-navigation android-architecture-components android-architecture-navigation android-jetpack-navigation
我看不懂 Java,我需要 Kotlin 的答案,我在这里阅读了一个线程:从给定的 url 获取域名
比如说我有一个这样的字符串: "http://www.myWebsite.com/profile"
那么如何以编程方式仅在这样的字符串中获取域名"myWebsite.com"?
假设我尝试使用Firestore监听器获取用户喜欢的eventID列表。我还使用离线持久性。
我知道监听器将立即使用缓存中的结果触发,如果有更改结果,我将获得包含更改的另一个快照。
快速地,获取列表的参考是:
FirestoreDocumentReference.users(uidUser: uid).reference().collection("likedEvents").addSnapshotListener({ (snapshot, error) in )}
Run Code Online (Sandbox Code Playgroud)
假设首先在Firestore数据库中有100个用户喜欢的eventID,然后用户又有另一个50个事件,这意味着我现在在数据库中有150个喜欢的eventID。
由于数据库从100更改为150,Firestore会与服务器核对吗?这会给我另一个快照。
我的问题是...
从Firestore接收新快照后,我要阅读150个文档还是仅阅读50个文档?我的意思是,我要重新阅读所有文档还是只是更改文档?
因为读取操作会影响Firestore的定价
ios ×7
android ×4
firebase ×4
swift ×4
android-architecture-components ×2
kotlin ×2
android-architecture-navigation ×1
google-maps ×1
listener ×1