Не удается подключиться к серверу при попытке отправить уведомление с одного устройства на другое - PullRequest
0 голосов
/ 02 августа 2020

Я хочу отправить уведомление с одного устройства на другое, используя облачный обмен сообщениями firebase и библиотеку модернизации. Вот интерфейс

import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Headers;
import retrofit2.http.POST;

public interface APIService {
 @Headers({"Authorization:key=AAAAnRKypUg:APA91bH1BUXr0tm5iWE8VsMqcIZN....",
          "Content-Type:application/json"})
@POST("fcm/send")
Call<ResponseSuccess> sendNotification(@Body NotificationSender body);

Вот ApiClient. java файл

import okhttp3.OkHttpClient;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class ApiClient {
private static Retrofit retrofit = null;
private static final String BASE_URL = "https://fcm.googleapis.com/";


public static Retrofit getClient() {
    if(retrofit == null) {
        retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL) 
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    }
    return retrofit;
}}

Вот главный файл, который используется для отправки уведомления.

public class Notification extends AppCompatActivity {

private APIService apiService;
EditText et;
private String receiverID;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_notification);
    receiverID = "Ju4qhlAIH5cTa0jAYp2m****"; //An user ID is taken just for testing to send a particular user.

    apiService = ApiClient.getClient().create(APIService.class);

    //Generate Token
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    FirebaseInstanceId.getInstance().getInstanceId().addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
        @Override
        public void onComplete(@NonNull Task<InstanceIdResult> task) {
            if(task.isSuccessful()) {
                String refreshToken = task.getResult().getToken();
                Token token = new Token(refreshToken);
                FirebaseDatabase.getInstance().getReference("Tokens").child(user.getUid()).setValue(token);
            }
        }
    });
}

public void sendBtn(View view) {
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    FirebaseDatabase.getInstance().getReference("Tokens").child(receiverID).child("token").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            String receiverToken = snapshot.getValue(String.class);
            notificationSend(receiverToken, "Test", "Testing Purpose");
        }

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

        }
    });
}

private void notificationSend(String receiverToken, String title, String message) {
    Data data = new Data(title, message);
    NotificationSender sender = new NotificationSender(data, receiverToken);

    apiService.sendNotification(sender).enqueue(new Callback<ResponseSuccess>() {
        @Override
        public void onResponse(Call<ResponseSuccess> call, Response<ResponseSuccess> response) {
            if(response.code() == 200) {
                
            }
            else if(response.code() == 400) {                   
                    Log.d("Error Message: ", response.toString());
            }
        }

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

        }
    });
}}

Я также реализую другие классы и службы, чтобы получить помощь в этом Учебник

Теперь основная проблема для меня в том, что ... Я всегда получаю значение response.code () - 400 . Я не могу понять и понять почему. Вы можете помочь мне?? Спасибо.

...