我正在尝试 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 键等