小编sar*_*rah的帖子

为什么我的应用程序在给予 Google API 密钥限制后总是未被授权?

我试图阅读一些关于这个问题的类似主题。但不幸的是我仍然遇到同样的问题。

所以基本上,我正在尝试使用 Goole Geocode API 将我的纬度经度的地理编码反转为人类可读的地址。

为了更安全,我对我的 iOS 应用程序的 API 密钥给予了更多限制。这是密钥的应用限制

在此处输入图片说明

而且我还给出了这样的 API 密钥限制,我确定我已经包含了地理编码 API 在此处输入图片说明

我还为我的项目启用了地理编码 API 在此处输入图片说明

但是当我运行应用程序时......我收到错误消息

此 IP、站点或移动应用程序无权使用此 API 密钥。从 IP 地址 xxxxxx 收到的请求为空引用

这里出了什么问题?如果限制设置为无,它工作正常

google-maps google-maps-api-3 ios google-geocoder google-cloud-platform

3
推荐指数
1
解决办法
4379
查看次数

更新Xcode后如何解决来自已安装Pod的警告?

我是编程新手,对不起,如果我的问题很愚蠢。我正在尝试使用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 swift

2
推荐指数
1
解决办法
955
查看次数

如何使从Firebase Firestore更快地获取数据?

我是编程和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)

getAllCitiesDataFromFirestoreCityKM课堂上使用方法来获取存储在Firestore中的城市数据

class CityKM {
    var name : String
    var coordinate : GeoPoint

    init (name: String , coordinate: GeoPoint ) {
        self.name = …
Run Code Online (Sandbox Code Playgroud)

ios firebase swift google-cloud-firestore

2
推荐指数
1
解决办法
1670
查看次数

我是否必须始终删除 Firestore 中的侦听器?

当我听 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

2
推荐指数
1
解决办法
2122
查看次数

为什么我的谷歌登录成功后没有显示帐户选择?

我已经成功地在我使用 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)

ios swift firebase-authentication google-signin

1
推荐指数
1
解决办法
2272
查看次数

将Firestore时间戳转换为Date数据类型

几天前,我刚刚将我的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文档中找不到它.

非常感谢你 :)

ios firebase swift google-cloud-firestore

1
推荐指数
1
解决办法
5462
查看次数

在Android中使用导航组件时如何删除默认动画过渡?

我正在使用导航组件,并且在主活动中有一个底部导航视图。当我点击该底部导航视图中的选项卡时,出现该片段时似乎动画淡入了。我认为我没有手动设置动画,似乎默认情况下该动画会存在。

我想删除该动画。这是我在主要活动中使用的代码。

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

1
推荐指数
2
解决办法
1158
查看次数

我可以使用 safeargs 将可为空的数据类型作为参数发送吗?如果不是我该怎么办?

说我有 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

1
推荐指数
1
解决办法
2338
查看次数

如何解析 URL 字符串以仅在 Kotlin 中获取域?

我看不懂 Java,我需要 Kotlin 的答案,我在这里阅读了一个线程:从给定的 url 获取域名

比如说我有一个这样的字符串: "http://www.myWebsite.com/profile"

那么如何以编程方式仅在这样的字符串中获取域名"myWebsite.com"

android kotlin

1
推荐指数
1
解决办法
1921
查看次数

如果Firestore数据库发生更改,我是否要再次阅读所有文档?

假设我尝试使用Firestore监听器获取用户喜欢的eventID列表。我还使用离线持久性。

从此线程:Firestore-使用缓存直到更新在线内容

我知道监听器将立即使用缓存中的结果触发,如果有更改结果,我将获得包含更改的另一个快照。

在此处输入图片说明

快速地,获取列表的参考是:

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的定价

android ios firebase google-cloud-firestore

0
推荐指数
1
解决办法
1390
查看次数