You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对接Firebase Realtime Database校验管理员专属QR码实现动态权限跳转

扫码校验对接Firebase Realtime Database 实现方案

改造思路

移除代码中硬编码的固定校验码,扫描拿到QR码内容后,直接到Firebase数据库的校验码节点查询该内容是否存在,存在则跳转高权限页面,不存在则提示无效。后续人员变动时仅需在Firebase控制台增删对应校验码即可,无需修改APP代码。

前置准备

  • 已在Android项目中集成Firebase Realtime Database SDK,app模块build.gradle中已添加依赖:
    implementation 'com.google.firebase:firebase-database:20.3.0'
    
  • 已将Firebase项目配置文件google-services.json放入app模块根目录
  • Firebase数据库中已新建valid_admin_qr_codes节点,所有有效管理员校验码直接存为该节点下的子键,值可设为true即可

修改后完整代码

public class BarcodeScanner extends AppCompatActivity {

    private CodeScanner mCodeScanner;
    // 移除硬编码的固定校验码,新增Firebase数据库引用
    private DatabaseReference mValidAdminCodesRef;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_barcode_scanner);
        // 初始化Firebase数据库校验码节点引用,节点名和你数据库实际命名保持一致即可
        mValidAdminCodesRef = FirebaseDatabase.getInstance().getReference("valid_admin_qr_codes");
        
        CodeScannerView scannerView = findViewById(R.id.scanner_view);
        mCodeScanner = new CodeScanner(this, scannerView);
        mCodeScanner.setDecodeCallback(new DecodeCallback () {
            @Override
            public void onDecoded(@NonNull final Result result) {
               BarcodeScanner.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        String codeFromScanner = result.getText().trim();
                        // 查询该扫码内容是否存在于校验码节点中
                        mValidAdminCodesRef.child(codeFromScanner).addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot snapshot) {
                                if(snapshot.exists()){
                                    // 校验通过,跳转管理员页面
                                    redirectToNewActivity();
                                }else{
                                    Toast.makeText(BarcodeScanner.this, "QRCode Tidak Dapat di Gunakan", Toast.LENGTH_SHORT).show();
                                }
                            }

                            @Override
                            public void onCancelled(@NonNull DatabaseError error) {
                                Toast.makeText(BarcodeScanner.this, "校验失败,请重试:"+error.getMessage(), Toast.LENGTH_SHORT).show();
                            }
                        });
                    }
                });
            }
        });


        scannerView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mCodeScanner.startPreview();
            }
        });
    }



    private void redirectToNewActivity() {
        startActivity(new Intent(getApplicationContext(), AdminUID.class));
        finish();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mCodeScanner.startPreview();
    }

    @Override
    protected void onPause() {
        mCodeScanner.releaseResources();
        super.onPause();
    }

}

注意事项

请调整Firebase安全规则,避免校验码节点被恶意篡改,参考规则如下:

{
  "rules": {
    "valid_admin_qr_codes": {
      ".read": true,
      ".write": "auth != null"
    }
  }
}

上述规则仅允许已登录的后台管理员修改校验码,所有人可读取校验,若你有更严格的安全要求可自行调整规则。

内容的提问来源于stack exchange,提问作者billy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:36:01