2017-09-25 8 views
0

私はAndroidアプリを開発しており、現在Google Firebaseを統合中です。私は既にデータベースを設定しています。私のアプリはGoogle Firebaseストレージから機密画像をダウンロードするので、これらの画像へのアクセスは許可されたユーザーにのみ許可する必要があります。 Firebaseデータベースでは、私は手動でストレージからイメージのURLを追加しました(私はそれを自動的に行うことを好みましたが、どのようにしたらよいか分かりません)。Firebaseはストレージへの不正アクセスを防ぎます

Firebaseストレージ内の異なるグラフィックスに異なるユーザーがアクセスできるようにするにはどうすればよいですか?

ありがとうございます!

編集:IAMのが出回っているをお読みください。Google Firebaseが、名前を推測することは困難で、画像の名前を変更、ユーザーがアプリを介して画像やあなたをアップロードん最も安全なソリューション

答えて

0

ではないようですか? 私はこれを提案できます:

プライベート画像ボタンがあります。 onCreateで

()メソッド本体の外側

imageButton = (ImageButton) findViewById(R.id.ibImageSelect); 
imageButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT); 
      galleryIntent.setType("image/*"); 
      startActivityForResult(galleryIntent, Gallery_Request); 

     } 
    }); 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == Gallery_Request && resultCode == RESULT_OK) { 
     imageUri = data.getData(); 
     imageButton.setImageURI(imageUri); 
    } 
} 

ボタンに

StorageReference upload = storageReference.child("what you want"); 
Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
byte[] data = baos.toByteArray(); 
    UploadTask filePath = upload.child(imageUri.getLastPathSegment()).putBytes(data); 
filePath.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 

filePath.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 

@Override 
         public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 


    DatabaseReference newPost = mref.push(); //this generates a random unique key 
replace with your own if you want, since you already got your own structure 



    newPost.child("image").setValue(imageUri.getLastPathSegment()); 
//set image name so can use this to download the image 

    } 
    }); 

をクリックして、各ノードに "状態" の子供を持つことができますすべてのノードをループするイメージをダウンロードするときは、ステータスがあなたがしたいものかどうかを確認してください。次に、イメージのダウンロードキーを取得します。画像のダウンロードのための

:ノードと子を

ループを、IMGのURLを取得し、あなたの答えのための

String ref = "image folder in firebase storage/" + imgurl; 
       storageRef.child(ref).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() { 
        @Override 
        public void onSuccess(byte[] bytes) { 
         // Use the bytes to display the image 
          final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 
ImageView iv = (ImageView) findViewByID(R.id...); 

iv.setImageBitmap(bitmap); 



        } 
       }).addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception exception) { 
         Log.i("error", exception.getMessage()); 
        } 
       }); 
+0

感謝。しかし、この解決策は、ハッカーがファイル名を推測できるようにするブルートフォース攻撃を阻止するものではありません。あなたのソリューションは、未承認のアクセスではないデータを保護しません。または私は間違っていますか? – user3853134

+0

編集:20 GB /月の価格は、ストレージよりもデータベースの方が約256倍高いので、ストレージを使用するのは間違いありません。 :) https://firebase.google.com/pricing/ – user3853134

関連する問題