问题
I am want send fcm notification
from android device to another device , using retrofit
.
I try this but,
public interface ApiInterface {
@Headers("Authorization : key=AAAA4Ubio1Q:APA91bGWkw84b1XX2nnnOKn8MO25U2giLRXXXTUkXidojFluZk_qKXXXlS27oMZZV5goTQdwRtpdmvI1iAPRZZDNKz6c-mpU6nvHZJ-Jg9f1fQ5NdttftqUpqwAkObLEEX26VFDDbXN8")
@POST("fcm/send")
Call<ResponseBody> sendChatNotification(@Field("to") String token,@Body RequestNotificaton requestNotificaton);
}
i am getting this error
java.lang.IllegalArgumentException: Unexpected char 0x20 at 13 in header name: Authorization
at okhttp3.Headers$Builder.checkNameAndValue(Headers.java:330)
at okhttp3.Headers$Builder.add(Headers.java:288)
at retrofit2.ServiceMethod$Builder.parseHeaders(ServiceMethod.java:329)
at retrofit2.ServiceMethod$Builder.parseMethodAnnotation(ServiceMethod.java:270)
at retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:175)
at retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170)
at retrofit2.Retrofit$1.invoke(Retrofit.java:147)
at java.lang.reflect.Proxy.invoke(Proxy.java:913)
at $Proxy0.sendChatNotification(Unknown Source)
at com.rudruam.v2chat.Activity.ChatActivity.sendNotificationToPatner(ChatActivity.java:288)
at com.rudruam.v2chat.Activity.ChatActivity.access$400(ChatActivity.java:94)
at com.rudruam.v2chat.Activity.ChatActivity$4.onClick(ChatActivity.java:227)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6499)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:442)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
I think there is an error
in Header
,
Note : I got this https://github.com/square/retrofit/issues/1153 ,but it's not work for me
回答1:
Finally solved problem !
It was mistake in header
, actually it is like this
@Headers({"Authorization: key=AAAA4Ubio1Q:APA91bGWkw84b1XX2nnnOKn8MO25U2giLRXXXTUkXidojFluZk_qKXXXlS27oMZZV5goTQdwRtpdmvI1iAPRZZDNKz6c-mpU6nvHZJ-Jg9f1fQ5NdttftqUpqwAkObLEEX26VFDDbXN8",
"Content-Type:application/json"})
Full code of how to send fcm notification
from android using retrofit
:-
public interface ApiInterface {
@Headers({"Authorization: key=AAAA4Ubio1Q:APA91bGWkw84b1Pw2nnnOKn8MO25U2giLRtv5TUkXidojFluZk_qKOGllS27oMZZV5goTQdwRtpdmvI1iAPRZZDNKz6c-mpU6nvHZJ-Jg9f1fQ5NdttftqUpqwAkObLEED26VFDDbXN8",
"Content-Type:application/json"})
@POST("fcm/send")
Call<ResponseBody> sendChatNotification(@Body RequestNotificaton requestNotificaton);
}
ApiClient class :-
public static final String BASE_URL = "https://fcm.googleapis.com/";
private static Retrofit retrofit = null;
public static Retrofit getClient() {
if (retrofit==null) {
retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return retrofit;
}
Model class :- RequestNotificaton.class
public class RequestNotificaton {
@SerializedName("token") // "to" changed to token
private String token;
@SerializedName("notification")
private SendNotificationModel sendNotificationModel;
public SendNotificationModel getSendNotificationModel() {
return sendNotificationModel;
}
public void setSendNotificationModel(SendNotificationModel sendNotificationModel) {
this.sendNotificationModel = sendNotificationModel;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
Model class :-SendNotificationModel.class
public class SendNotificationModel {
private String body,title;
public SendNotificationModel(String body, String title) {
this.body = body;
this.title = title;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
Main Code:-
private void sendNotificationToPatner() {
SendNotificationModel sendNotificationModel = new SendNotificationModel("check", "i miss you");
RequestNotificaton requestNotificaton = new RequestNotificaton();
requestNotificaton.setSendNotificationModel(sendNotificationModel);
//token is id , whom you want to send notification ,
requestNotificaton.setToken(token);
apiService = ApiClient.getClient().create(ApiInterface.class);
retrofit2.Call<ResponseBody> responseBodyCall = apiService.sendChatNotification(requestNotificaton);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Log.d("kkkk","done");
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
}
});
}
I hope its help You!
Note
Dependencies are :-
// retrofit, gson
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
来源:https://stackoverflow.com/questions/49828430/how-to-send-fcm-notification-from-android-using-retrofit