2016-07-30 10 views
5

私はfirebaseストレージを初めて使いました。ちょうど私がそれを学ぶことができたので、私はボタンとImageViewを持っている簡単なアプリを作った。ボタンをクリックすると、画像(from drawable)がImageViewに表示されます。 Firebaseに画像をアップロードするコードも書いてありますが、例外メッセージonAddFailureListenerはメッセージにこのオブジェクトにアクセスする権限がありません。どうすればいいですか?ここでユーザーはこのオブジェクトにアクセスする権限を持っていません。 Firebase storage android

package com.example.asad.save_photo; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.os.Bundle; 
import android.net.Uri; 
import android.os.Environment; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnFailureListener; 
import com.google.android.gms.tasks.OnSuccessListener; 
import com.google.firebase.storage.FirebaseStorage; 
import com.google.firebase.storage.StorageMetadata; 
import com.google.firebase.storage.StorageReference; 
import com.google.firebase.storage.UploadTask; 

import java.io.ByteArrayOutputStream; 
import java.io.File; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     FirebaseStorage storage = FirebaseStorage.getInstance(); 

     StorageReference storageRef = storage.getReferenceFromUrl("gs://savephoto-a1cc3.appspot.com"); 

     final StorageReference mountainsRef = storageRef.child("asad"); 

     Button butt = (Button) findViewById(R.id.button); 


     butt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       ImageView imageView = (ImageView) findViewById(R.id.image); 
       imageView.setImageResource(R.drawable.back2); 
       //imageView.setImageResource(R.drawable.back2); 

       imageView.setDrawingCacheEnabled(true); 
       imageView.buildDrawingCache(); 
       Bitmap bitmap = imageView.getDrawingCache(); 


       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
       bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
       final byte[] data = baos.toByteArray(); 

       UploadTask uploadTask = mountainsRef.putBytes(data); 
       uploadTask.addOnFailureListener(new OnFailureListener() { 
        @Override 
        public void onFailure(@NonNull Exception exception) { 
         // Handle unsuccessful uploads 
         showToast(exception.getMessage()); 
        } 
       }); 
         uploadTask.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
        @Override 
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
         // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL. 
         //Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
         showToast("success !!!!!"); 
        } 
       }); 


      } 
     }); 

    } 

    public void showToast(String s) { 
     Toast.makeText(this,s,Toast.LENGTH_LONG).show(); 
    } 
} 

私firebaseストレージルールは

service firebase.storage { 
    match /b/savephoto-a1cc3.appspot.com/o { 
    allow read,write; 
    } 
} 
+0

お使いのOSのバージョンは6.0ですか?はいの場合は、http://stackoverflow.com/questions/38141523/directory-creation-not-working-in-marshmallow-android/38141778#38141778 –

+0

からランタイム許可を取得してください。私のOSのバージョンは4.2 – ashay

+0

マニフェストファイルに権限を追加しましたか? –

答えて

13

ある公共の読み取りおよび書き込みアクセスがすべてのパス上で許可されていることを示すためにmatch /{allPaths=**}でセキュリティルールを更新します。

service firebase.storage { 
    match /b/savephoto-a1cc3.appspot.com/o { 
    match /{allPaths=**} { 
     // Allow access by all users 
     allow read, write; 
    } 
    } 
} 

様々なデフォルトのルールドキュメントのSample Rulesセクションのタブに記載されています。

+1

どこにこれを追加しますか? –

+0

@rosualin:あなたのプロジェクトの[Firebase Console](https://console.firebase.google.com/)で –

2
がFirebaseコンソールでストレージルールを変更

enter image description here

service firebase.storage { 
    match /b/{bucket}/o { 
    match /{allPaths=**} { 
     allow read, write: if request.auth != null; 
    } 
    } 
} 
関連する問題