我正在尝试 fcm 使用改造 class 向其他应用程序发送消息,但它在改造 class 时出错
I am trying fcm to send message to other app using retrofit class but it gives error in retrofit class
这是我在尝试初始化 fcm class 对象时遇到的错误
com.example.myfoodserver E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myfoodserver, PID: 28042
java.lang.ExceptionInInitializerError
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at retrofit2.Retrofit$Builder.build(Retrofit.java:628)
at com.example.myfoodserver.remote.RetrofitFCMClient.getInstance(RetrofitFCMClient.java:17)
at com.example.myfoodserver.ui.order.OrderFragment.initViews(OrderFragment.java:126)
at com.example.myfoodserver.ui.order.OrderFragment.onCreateView(OrderFragment.java:106)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
这是fcm class代码
public interface IFCMService {
@Headers({"Authorization: key=AAAAVY7Xgs4:APA91bF_OPZaLVUixFZ3yxBG2lJn2s45o1J99cvO2YW-gBOGbpUkeUUDgalJsiTuTMXBA1orPa2Uqjt1Gsd_FcbOdoMpjy7VZzwfZPzV_YKDWCXBeu",
"Content-Type:application/json"})
@POST("fcm/send")
Observable<FCMResponse> sendNotification(@Body FCMSendData body);
这是改造 class,在构建行上给出错误
public class RetrofitFCMClient {
private static Retrofit instance;
public static Retrofit getInstance() {
if (instance == null)
instance = new Retrofit.Builder()
.baseUrl("https://fcm.googleapis.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return instance;
}
}
This is the ScreenShot of error
这似乎是因为 okhttp 在 3.13+ 版本中放弃了对 android 5 以下版本的支持
参见 https://github.com/square/okhttp/issues/4481
一个解决方案是通过 adding/changing 你对
的依赖来强制执行旧的 okhttp 版本
implementation ('com.squareup.okhttp3:okhttp'){
version {
strictly '3.12.12'
}
}
附带说明一下,下次上传代码时,请务必删除 api 键等
这是我在尝试初始化 fcm class 对象时遇到的错误
com.example.myfoodserver E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myfoodserver, PID: 28042
java.lang.ExceptionInInitializerError
at okhttp3.OkHttpClient.newSslSocketFactory(OkHttpClient.java:263)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:229)
at okhttp3.OkHttpClient.<init>(OkHttpClient.java:202)
at retrofit2.Retrofit$Builder.build(Retrofit.java:628)
at com.example.myfoodserver.remote.RetrofitFCMClient.getInstance(RetrofitFCMClient.java:17)
at com.example.myfoodserver.ui.order.OrderFragment.initViews(OrderFragment.java:126)
at com.example.myfoodserver.ui.order.OrderFragment.onCreateView(OrderFragment.java:106)
at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2698)
at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
这是fcm class代码
public interface IFCMService {
@Headers({"Authorization: key=AAAAVY7Xgs4:APA91bF_OPZaLVUixFZ3yxBG2lJn2s45o1J99cvO2YW-gBOGbpUkeUUDgalJsiTuTMXBA1orPa2Uqjt1Gsd_FcbOdoMpjy7VZzwfZPzV_YKDWCXBeu",
"Content-Type:application/json"})
@POST("fcm/send")
Observable<FCMResponse> sendNotification(@Body FCMSendData body);
这是改造 class,在构建行上给出错误
public class RetrofitFCMClient {
private static Retrofit instance;
public static Retrofit getInstance() {
if (instance == null)
instance = new Retrofit.Builder()
.baseUrl("https://fcm.googleapis.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
return instance;
}
}
This is the ScreenShot of error
这似乎是因为 okhttp 在 3.13+ 版本中放弃了对 android 5 以下版本的支持 参见 https://github.com/square/okhttp/issues/4481 一个解决方案是通过 adding/changing 你对
的依赖来强制执行旧的 okhttp 版本implementation ('com.squareup.okhttp3:okhttp'){
version {
strictly '3.12.12'
}
}
附带说明一下,下次上传代码时,请务必删除 api 键等