如何获取所有uid到Array并将FCM发送给组中的所有用户

时间:2019-05-27 11:32:59

标签: android firebase firebase-cloud-messaging

我正在制作pheed(使用群组)应用。

我正在尝试使用pheed时通过fcm进行通知

但是我不知道获取所有uid并发送所有用户令牌。

请帮助我。

(激活了上传图像,上传pheed。问题是获取所有uid并向所有用户发送通知)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_post_add);
    apiService = Client.getClient("https://fcm.googleapis.com/").create(APIService.class);
    Intent intent = getIntent();

    group_title = intent.getStringExtra("group_title");
    userid = intent.getStringExtra("userid");
    userImageURL = intent.getStringExtra("userImageURL");
    userName =  IndexActivity.spref.getString("str_userName", "default");

    fuser = FirebaseAuth.getInstance().getCurrentUser();


    close = findViewById(R.id.postAdd_close);
    image_added = findViewById(R.id.postAdd_image_added);
    post = findViewById(R.id.postAdd_post);
    description = findViewById(R.id.post_description);

    storageReference = FirebaseStorage.getInstance().getReference("posts");

    close.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

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

            uploadImage();
            notify = true;
        }
    });

    CropImage.activity()
            .setAspectRatio(2, 1)
            .start(PostAddActivity.this);

    reference2 = FirebaseDatabase.getInstance().getReference("Group").child(group_title);
    ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for (DataSnapshot ds: dataSnapshot.getChildren()) {
                receiver = ds.child("userList").getValue(String.class);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    };
    reference2.addListenerForSingleValueEvent(eventListener);

    final String con = description.getText().toString();

    reference = FirebaseDatabase.getInstance().getReference("Users").child(fuser.getUid());
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            User user = dataSnapshot.getValue(User.class);
            if(notify){
                sendNotification(receiver,user.getUsername(),con);
            }
            notify = false;
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}


private  void sendNotification(String receiver, final String userName, final String con){

    DatabaseReference tokens = FirebaseDatabase.getInstance().getReference("Tokens");
    Query query = tokens.orderByKey().equalTo(receiver);
    query.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot:dataSnapshot.getChildren()){
                Token token = snapshot.getValue(Token.class);
                Data data = new Data(fuser.getUid(),R.mipmap.ic_launcher,userName+": "+con,"새로운 피드",userid);

                Sender sender = new Sender(data,token.getToken());

                apiService.sendNotification(sender)
                        .enqueue(new Callback<MyResponse>() {
                            @Override
                            public void onResponse(Call<MyResponse> call, Response<MyResponse> response) {
                                if(response.code()==200){
                                    if(response.body().success!=1){
                                        //Toast.makeText(PostAddActivity.this,"Failed",Toast.LENGTH_SHORT).show();
                                    }
                                }
                            }

                            @Override
                            public void onFailure(Call<MyResponse> call, Throwable t) {

                            }
                        });
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

enter image description here

0 个答案:

没有答案