使用 Android 中的改造库发送 FCM 推送通知



尝试使用 Android 中的改造库发送 fcm 通知。我想向其他安卓设备显示带有标题和消息的通知。 下面是用于推送通知的代码和示例文件。

使用改造调用发送推送通知的功能:

private void sendNotification(String deviceId,String sender,String message)
{
FirebaseApi apiService =   
FirebaseClient.getClient().create(FirebaseApi.class);
NotifyData notifydata = new NotifyData(sender,message);
Call<FirebaseMessage> call = apiService.sendMessage(new 
FirebaseMessage(deviceId, notifydata));
call.enqueue(new Callback<FirebaseMessage>() {
@Override
public void onResponse(Call<FirebaseMessage> call, 
Response<FirebaseMessage> response) {
Log.e("Message Response","Send");
}
@Override
public void onFailure(Call<FirebaseMessage> call, Throwable t) {
Log.e("Message Response","Fail");
}
});
}

FirebaseMessage 类:

public class FirebaseMessage {
String to;
NotifyData notification;
public FirebaseMessage(String to, NotifyData notification) {
this.to = to;
this.notification = notification;
}

}

通知数据类:

public class NotifyData {
String title;
String body;
public NotifyData(String title, String body ) {
this.title = title;
this.body = body;
}
}

FirebaseClient Class:

public class FirebaseClient {
public static Retrofit RETROFIT     = null;
public static Retrofit getClient(){
if(RETROFIT==null){
OkHttpClient client = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())
.build();
RETROFIT = new Retrofit.Builder()
.baseUrl(StaticConfig.FIREBASE_URL)
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.build();
}
return RETROFIT;
}
}

FirebaseApi Class:

public interface FirebaseApi {
@Headers({"Authorization: key=Legacy Service Key",
"Content-Type:application/json"})
@POST("fcm/send")
Call<FirebaseMessage> sendMessage(@Body FirebaseMessage message);
}

在 MyFirebaseMessagingService 类中:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
String title=remoteMessage.getData().get("title");
String body=remoteMessage.getData().get("body");
sendNotification(title, body);
}

但它每次都显示空白通知,标题为空,正文为空。 如何通过远程消息正确检索我的通知数据。

模块:应用依赖项

implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'

接口客户端

public class ApiClient {
private 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;
}
}

接口

public interface ApiInterface {
@Headers({"Authorization: key=" + ConstantKey.SERVER_KEY, "Content-Type:application/json"})
@POST("fcm/send")
Call<ResponseBody> sendNotification(@Body RootModel root);
}

根模型

public class RootModel {
@SerializedName("to") //  "to" changed to token
private String token;
@SerializedName("notification")
private NotificationModel notification;
@SerializedName("data")
private DataModel data;
public RootModel(String token, NotificationModel notification, DataModel data) {
this.token = token;
this.notification = notification;
this.data = data;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public NotificationModel getNotification() {
return notification;
}
public void setNotification(NotificationModel notification) {
this.notification = notification;
}
public DataModel getData() {
return data;
}
public void setData(DataModel data) {
this.data = data;
}
}

通知模型

public class NotificationModel {
private String title;
private String body;
public NotificationModel(String title, String body) {
this.title = title;
this.body = body;
}
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;
}
}

数据模型

public class DataModel {
private String name;
private String age;
public DataModel(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}

使用此方法发送通知

private void sendNotificationToUser(String token) {
RootModel rootModel = new RootModel(token, new NotificationModel("Title", "Body"), new DataModel("Name", "30"));
ApiInterface apiService =  ApiClient.getClient().create(ApiInterface.class);
retrofit2.Call<ResponseBody> responseBodyCall = apiService.sendNotification(rootModel);
responseBodyCall.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(retrofit2.Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
Log.d(TAG,"Successfully notification send by using retrofit.");
}
@Override
public void onFailure(retrofit2.Call<ResponseBody> call, Throwable t) {
}
});
}

哇,当我尝试@Mustofa卡迈勒的答案时。 我遇到了关于模型的问题,因为我得到错误代码 400,这意味着使用格式 JSON 解析时出错。 因此,我使用 JsonObject 作为数据解析为 JSON 格式,如下所示

JsonObject jNotif = new JsobObject()
jNotif.addProperly("title","hello world");
jNotif.addProperly("body","hello this world");
JsonObject jFCM = new JsonObject()
jFCM.add("notification",jNotif);
jFCM.addProperly("to",<your_token_from_firebase>);

我在 ApiInterface 中使用这样的接口:

@Headers({"Content-Type: application/json","Authentication: <your_server_key>"})
@POST("/fcm/send")
Call<<your_model_response>> createFirebaseCloudM(@Body <your_model_class>);

我将该代码包含在方法填充改造响应中。 我知道你如何处理来自改造的响应,它与上面的答案相同。 但是,当您发送数据时没有模型

希望会有所帮助...

相关内容

  • 没有找到相关文章