如何使用 Retrofit 从 android 发送 FCM 通知? [英] How to send FCM notification from android using Retrofit?
问题描述
我想使用 retrofit
将 fcm 通知
从 android 设备发送到另一台设备.
I am want send fcm notification
from android device to another device , using retrofit
.
我试试这个,但是
public interface ApiInterface {
@Headers("Authorization : key=AAAA4Ubio1Q:APA91bGWkw84b1XX2nnnOKn8MO25U2giLRXXXTUkXidojFluZk_qKXXXlS27oMZZV5goTQdwRtpdmvI1iAPRZZDNKz6c-mpU6nvHZJ-Jg9f1fQ5NdttftqUpqwAkObLEEX26VFDDbXN8")
@POST("fcm/send")
Call<ResponseBody> sendChatNotification(@Field("to") String token,@Body RequestNotificaton requestNotificaton);
}
我收到此错误
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)
我认为 Header
中有一个 error
,
I think there is an error
in Header
,
注意:我得到了这个 https://github.com/square/retrofit/issues/1153,但这对我不起作用
Note : I got this https://github.com/square/retrofit/issues/1153 ,but it's not work for me
推荐答案
问题终于解决了!
header
写错了,其实是这样的
It was mistake in header
, actually it is like this
@Headers({"Authorization: key=AAAA4Ubio1Q:APA91bGWkw84b1XX2nnnOKn8MO25U2giLRXXXTUkXidojFluZk_qKXXXlS27oMZZV5goTQdwRtpdmvI1iAPRZZDNKz6c-mpU6nvHZJ-Jg9f1fQ5NdttftqUpqwAkObLEEX26VFDDbXN8",
"Content-Type:application/json"})
如何使用retrofit
从android发送fcm通知
的完整代码:-
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 类:-
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;
}
模型类:- RequestNotificaton.class
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;
}
}
模型类:-SendNotificationModel.class
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;
}
}
主要代码:-
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) {
}
});
}
希望对你有帮助!
注意
依赖项是:-
// 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'
这篇关于如何使用 Retrofit 从 android 发送 FCM 通知?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!