小编Dan*_*l F的帖子

Android FirebaseAuth 未记录的`getAccessToken`

我找不到有关该getAccessToken方法的任何信息,可以在FirebaseAuth.getInstance().getAccessToken(boolean)

我的 Android 应用需要从 Firebase 获取 JWT 访问令牌(“idToken”),以便让我的自定义后端能够对用户进行身份验证(注册/登录)。

一些玩耍的人告诉我

String jwt = FirebaseAuth
                .getInstance()
                .getAccessToken(false)
                .getResult()
                .getToken();
Run Code Online (Sandbox Code Playgroud)

FirebaseAuth
    .getInstance()
    .getAccessToken(true)
    .addOnCompleteListener(new OnCompleteListener<GetTokenResult>() {
        @Override
        public void onComplete(@NonNull Task<GetTokenResult> task) {
            String jwt = task.getResult().getToken();
        }
    });
Run Code Online (Sandbox Code Playgroud)

似乎让我获得了这样的 JWT。

我一直在寻找有关的信息,getAccessToken(boolean)但找不到任何相关信息。我特别想知道布尔值代表什么;我猜是“异步”,但这感觉有点奇怪,因为“阻塞”会是更好的选择。

我担心由于没有关于此方法的文档,因此它可能已被弃用或什么的。

在进一步检查其他项目/谷歌搜索后,我注意到FirebaseUser通过

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
Run Code Online (Sandbox Code Playgroud)

还包含一个getIdToken(boolean)方法,它被指定为

public Task<GetTokenResult> getIdToken (boolean forceRefresh)

这是同一个吗?那个FirebaseAuth.getInstance()只是为了方便吗?应该避免吗?

更新:他们有相同的行为。如果我用 调用它们forceRefresh=false,它们会产生相同的 JWT。

android firebase-authentication

6
推荐指数
0
解决办法
535
查看次数

为什么应该在 Py_Initialize() 之前调用 PyImport_AppendInittab()?

根据文档,PyImport_AppendInittab“应该在 Py_Initialize() 之前调用”。

没有解释为什么会这样,忽略这个建议会产生一个有效的应用程序。那么,既然这是有效的,那么在什么情况下它会无效呢?

c++ python

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

防止 apt-get 升级期间 Docker-Engine 重新启动

我在使用 Ubuntu 14.04 时遇到了问题

每当我进行 apt-get 升级时,如果 docker-engine 符合升级条件,它会在升级后重新启动服务。这会导致容器重新启动。

其中一个容器在启动过程中需要手动干预,其他容器正在收集时间关键的数据,因此仅需要在非常特定的时间重新启动容器。

如何从这些自动重启中排除 docker-engine 服务?

AFAIK,例如 mongodb,在 apt-get 升级后不会重新启动 mongod,为什么 docker 不能以同样的方式运行?

upgrade restart apt-get docker

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

Android GoogleSignIn:同时多个账户+失败延迟登录

我正在编写一个应用程序,它使用 Firebase 身份验证与我的后端服务器进行身份验证。

我提供基于 Google 登录和电子邮件/密码的身份验证。电子邮件/密码是微不足道的。

这是我使用 Google 登录的流程:

1) 我创建了一个with , where with andmGoogleApiClient= new GoogleApiClient.addApi(Auth.GOOGLE_SIGN_IN_API, gso)gso= GoogleSignInOptions.requestIdToken(...)).requestEmail()

2)我在哪里打电话startActivityForResult(signInIntent, RC_GOOGLE_SIGN_IN);signInIntent= Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient)

3) 在onActivityResult我得到并从那里我最终通过调用登录到 Firebaseresult= Auth.GoogleSignInApi.getSignInResultFromIntent(data);GoogleSignInAccountaccount=result.getSignInAccount()mFirebaseAuth.signInWithCredential(GoogleAuthProvider.getCredential(account.getIdToken(), null))

4) 然后我“生成”/检索一个 Firebase JWT fbUser.getToken(false),然后我通过它发送到后端服务器以在那里创建/验证用户。

这 4 个步骤起作用了。我能够将应用程序登录到 Firebase 并登录到我的后端服务器。

如果我一次只想使用一个帐户,这很好。实际上,这就是我想要做的,但我的问题如下

我想像 Gmail 或 Inbox 一样,提供通过上述 4 个步骤至少登录过一次的帐户列表。

当用户点击一个帐户时,我想要做一些与这 4 个步骤有点不同的事情。我想做一些类似无声登录的事情,因为我们已经知道应该登录哪个帐户。我不希望 Google 登录帐户选择对话框出现在我必须再次选择该地址的地方。最坏的情况下,用户最初点击 …

android multiple-accounts firebase-authentication google-signin

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

检测日志文件旋转(在监视日志文件进行修改的同时)

我使用以下代码跟踪ssh登录:

def follow(thefile):
  thefile.seek(0,2)
  while True:
    line = thefile.readline()
    if not line:
      time.sleep(0.1)
      continue
    yield line

if __name__ == '__main__':
  logfile = open('/var/log/auth.log', 'r')
  loglines = follow(logfile)
  for line in loglines:
    print 'do something here'
Run Code Online (Sandbox Code Playgroud)

我注意到该脚本在几天后突然停止工作。我没有任何错误,它不会终止,只会停止工作,好像readline()永远不会返回。

所以我执行了a echo 'test' >> auth.log.1,这的确是被脚本处理了,因为前一段时间auth.log将其重命名为auth.log.1

如何跟踪这种日志轮换的时间并进行相应调整?

python linux logging

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

Android:直接在应用程序中使用 HID over GATT(Gadget=HID?控制应用程序)

我有一个带有几个按钮的蓝牙 LE 操纵杆。我想在不使用蓝牙设置的情况下将其直接连接到应用程序,而是通过BluetoothLeScanner.

我已经可以连接到心率监测器并定期收到 HR 值的通知。

我还创建了一个带有 ESP32 的小温度/光/湿度传感器,我也可以连接到该传感器并在应用程序中显示传感器值。

我对这个 HID 设备的理解可能是错误的。在应用程序 BLE Scanner 的帮助下,我可以通过 BLE 连接到这个小工具并查看提供的服务。

其中之一是0x1812 HUMAN INTERFACE DEVICE,它包含几个类型的特征REPORT,其中描述了HID OVER GATT PROFILE SPECIFICATION( HOGP_SPEC)

如何找出按下了哪个按钮,操纵杆已移动到哪个位置?我想这必须通过我必须订阅的通知发生。

是否有任何 Android 库可用于处理 HID 输入设备?我不想做的是使用蓝牙设置并连接到设备并将其检测为 HID 设备并用一些奇怪的映射替换键盘。我根本不希望操作系统介入,就像我连接和使用 HRM 和 ESP32 一样。

我找不到这方面的任何信息。

我可以使用我的应用程序连接到设备,枚举服务和特性。但从那时起,我不知道如何使用 HID。理想情况下,我会收到诸如“按钮 A 已被按下”“操纵杆已移动到 x=32”之类的通知,例如,其中 x 的范围从 -127 到 127。

android bluetooth hid bluetooth-lowenergy

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

退订RxJava2 / RxAndroid PublishSubject

我正在尝试用RxAndroid替换EventBus。

我希望可分页的片段订阅/取消订阅事件源,这些片段的创建和丢弃相对较快,具体取决于用户滑动到新页面的速度。

在EventBus中,我能够添加修饰的回调方法(例如@Subscribe(threadMode = ThreadMode.MAIN)),并在片段的onStart / onStop方法中注册/注销。

现在,使用RxJava2 PublishSubject在类中创建一个对象

public static PublishSubject<List<Long>> m_psUpdatedDays = PublishSubject.create();
public static void publishUpdatedDays(List<Long> lDay) {
    m_psUpdatedDays.onNext(lDay);
}
Run Code Online (Sandbox Code Playgroud)

并通过Fragment的onStart方法调用以下内容来订阅该发布者在另一个类中的操作:

m_psUpdatedDays.observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<List<Long>>() {
    @Override public void onSubscribe(Disposable d) {}
    @Override public void onNext(List<Long> longs) {
      ...
      Update Fragment UI here
      ...
    }
    @Override public void onError(Throwable e) {}
    @Override public void onComplete() {}
});
Run Code Online (Sandbox Code Playgroud)

我的问题是,当onStop系统调用Fragment的方法时,如何取消订阅该新的Observer ?

我是否需要存储Disposable获取到的对象,onSubscribe然后.dispose()onStop方法中对其进行调用?

publish-subscribe event-bus rx-android rx-java2

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

将 Python 的控制台输出重定向到 Dash

如何重定向/显示控制台输出(包括我在程序中打印的输出),以便它出现在 Dash 应用程序中(在用户看到的屏幕上)?

python plotly plotly-dash

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

Python装饰器以时间递归函数

我有一个简单的装饰器来跟踪函数调用的运行时间:

def timed(f):
    def caller(*args):
        start = time.time()
        res = f(*args)
        end = time.time()
        return res, end - start
    return caller
Run Code Online (Sandbox Code Playgroud)

这可以如下使用,并返回函数结果和执行时间的元组.

@timed
def test(n):
    for _ in range(n):
        pass
    return 0

print(test(900)) # prints (0, 2.69e-05)
Run Code Online (Sandbox Code Playgroud)

很简单.但现在我想将它应用于递归函数.将上述包装器应用于递归函数会导致嵌套元组具有每个递归调用的时间,如预期的那样.

@timed
def rec(n):
    if n:
        return rec(n - 1)
    else:
        return 0

print(rec(3)) # Prints ((((0, 1.90e-06), 8.10e-06), 1.28e-05), 1.90e-05)
Run Code Online (Sandbox Code Playgroud)

编写装饰器以便正确处理递归的优雅方法是什么?显然,如果定时函数可以包装调用:

@timed
def wrapper():
    return rec(3)
Run Code Online (Sandbox Code Playgroud)

这将给出结果和时间的元组,但我希望所有这些都由装饰器处理,这样调用者就不必担心为每个调用定义一个新函数.想法?

python recursion python-3.x python-decorators

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

Android 10:将外部存储中的文件保存到名为“ / sdcard / my-app /”的目录中有哪些选择?

在Android Pie之前,我始终存储应用程序需要存储在上的文件,这些文件/sdcard/my-app/是通过

File fBaseDir = new File(Environment.getExternalStorageDirectory(), "my-app");

我的一个应用程序在其中存储了数百个(最多数千个)收藏夹图标/sdcard/my-app/favicons,当用户创建该应用程序的备份时,它将存储在中/sdcard/my-app/backups。与我的应用共享时,Chrome浏览器拍摄的网页屏幕快照存储在中/sdcard/my-app/screenshots,依此类推。

当我卸载该应用程序时,我可以稍后重新安装它,并且仍然具有所有图标,屏幕快照和备份可用于恢复状态,而不必重新下载所有图标(并且可能丢失了所有其他数据)。

我还可以/sdcard/my-app/通过将目录复制到PC上轻松创建该目录的备份,并在另一部手机上将其还原,例如,当我迁移到新设备时。

我还可以使用文件浏览器查看该目录中的文件,然后选择并通过电子邮件发送或将其复制到Google云端硬盘,或专门删除其中的一些文件(例如旧的备份文件)。

在Android 10中,这种方法已经崩溃。我无法将图标添加到Images Media-Folder,因为它们不是真实图像,它们会不必要地使视图混乱,并可能禁止我的开发者帐户进入Play商店。我也不想将所有这些数据存储在App-Private目录中,因为在卸载该应用程序时,这些数据将被删除,并且因为其他应用程序(例如资源管理器)无法访问它们。

我有什么选择?手动选择文件或目录不是一种选择,除非目录只需要选择一次,然后永久授予访问权限(以读取和写入文件)。

我从不在外面读书或写东西/sdcard/my-app/

android file-access android-external-storage android-10.0

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