【问题标题】:I am trying fcm to send message to other app using retrofit class but it gives error in retrofit class我正在尝试 fcm 使用改造类向其他应用程序发送消息,但它在改造类中给出错误
【发布时间】:2020-06-15 14:51:09
【问题描述】:

这是我尝试初始化 fcm 类对象时遇到的错误

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 类代码

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);

这是改造类,在构建线上会出错

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

【问题讨论】:

  • ifcmService = RetrofitFCMClient.getInstance().create(IFCMService.class);
  • 那是我初始化 fcm 类的对象的地方,它给出了错误,我仍然不明白为什么当我尝试初始化改造对象时它给出了这个错误

标签: android firebase android-studio firebase-cloud-messaging retrofit2


【解决方案1】:

这似乎是因为 okhttp 在 3.13+ 版本中放弃了对低于 5 的 android 版本的支持 见https://github.com/square/okhttp/issues/4481 一个解决方案是通过添加/更改您的依赖项来强制执行较旧的 okhttp 版本

implementation ('com.squareup.okhttp3:okhttp'){
    version {
        strictly '3.12.12'
    }
}

附带说明,下次上传代码时,请确保删除 api 密钥等

【讨论】:

  • 那没用,不用担心 api 密钥是假的,它只是为了参考显示我把密钥留空。感谢您的关注,错误和我之前提到的一样
  • 我认为你是对的,但你能告诉我如何添加 okhttp 客户端来解决这个问题,因为我的应用程序支持低于 21 api,我认为我面临的问题是因为 okhttp 放弃了对低于 api 的支持21,需要客户端拦截
  • @AliHamza 我更新了我的答案,看看这是否适合你
  • 这和androidx有什么关系?这是两件完全不同的事情
  • 对不起我的错误现在我可以完成它了。我现在只需要对这个语法做一些研究就可以了
猜你喜欢
  • 1970-01-01
  • 2021-04-09
  • 2020-11-16
  • 2018-12-09
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-29
相关资源
最近更新 更多