Android:从Firebase获取当前日期和时间

Jak*_*ath 3 android timestamp firebase firebase-realtime-database

我正在开发一个简单的游戏,用户每天都会获得奖金。我想从Firebase服务器获取当前日期和时间,因为我不想依赖可以操纵的设备时间。
我在firebase中经历了ServerValue.TIMESTAMP,但不知道如何使用它返回一个带有时间戳的值的地图,如何将该时间戳转换为日期,当用户单击每日时,我想从firebase获取今天的日期奖金。

3ll*_*omi 7

由于Firebase引入了可调用函数,因此您可以通过在Firebase Cloud Functions中创建可调用函数来轻松地在应用程序中使用它。在中index.js,创建一个Function并使其返回当前时间戳

exports.getTime = functions.https.onCall((data,context)=>{
return Date.now()
})
Run Code Online (Sandbox Code Playgroud)

然后将其部署到Firebase Cloud Functions

然后在您的Android应用中添加Callable Functions依赖项

implementation 'com.google.firebase:firebase-functions:16.1.0'
Run Code Online (Sandbox Code Playgroud)

然后像这样在您的应用中调用该函数,并确保您输入的函数名称与Cloud Function 中的函数名称“ getTime ”相同

    FirebaseFunctions.getInstance().getHttpsCallable("getTime")
            .call().addOnSuccessListener(new OnSuccessListener<HttpsCallableResult>() {
        @Override
        public void onSuccess(HttpsCallableResult httpsCallableResult) {
            long timestamp = (long) httpsCallableResult.getData();

        }
    });
Run Code Online (Sandbox Code Playgroud)

如果要在多个类中调用此方法,还可以创建一个Simple接口

public interface OnGetServerTime {
    void onSuccess(long timestamp);

    void onFailed();
}

 public void getServerTime(final OnGetServerTime onComplete) {
    FirebaseFunctions.getInstance().getHttpsCallable("getTime")
            .call()
            .addOnCompleteListener(new OnCompleteListener<HttpsCallableResult>() {
                @Override
                public void onComplete(@NonNull Task<HttpsCallableResult> task) {
                    if (task.isSuccessful()) {
                        long timestamp = (long) task.getResult().getData();
                        if (onComplete != null) {
                            onComplete.onSuccess(timestamp);
                        }
                    } else {
                        onComplete.onFailed();
                    }
                }
            });

}
Run Code Online (Sandbox Code Playgroud)