首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ios版本的应用程序可以工作,但安卓系统失败,因为没有为React Native应用程序的AccessToken找到合适的构造函数

Ios版本的应用程序可以工作,但安卓系统失败,因为没有为React Native应用程序的AccessToken找到合适的构造函数
EN

Stack Overflow用户
提问于 2018-10-24 13:33:54
回答 3查看 2.4K关注 0票数 4

正如标题中提到的,此应用程序的Ios版本在物理设备上运行良好。然而,当我尝试在android设备上构建它时,我得到了一个错误

代码语言:javascript
复制
error: no suitable constructor found for AccessToken(String,String,String,<null>,<null>,<null>,<null>,<null>)
constructor AccessToken.AccessToken(String,String,String,Collection<String>,Collection<String>,AccessTokenSource,Date,Date,Date) is not applicable
(actual and formal argument lists differ in length)
constructor AccessToken.AccessToken(Parcel) is not applicable
(actual and formal argument lists differ in length)

此错误在FBGraphRequestModule.java文件中突出显示,特别是在此方法中

代码语言:javascript
复制
    private void setConfig(GraphRequest graphRequest, ReadableMap configMap) {
            if (configMap == null) {
                graphRequest.setAccessToken(AccessToken.getCurrentAccessToken());
                return;
            }
            if (configMap.hasKey("parameters")) {
                graphRequest.setParameters(buildParameters(configMap.getMap("parameters")));
            }
            if (configMap.hasKey("httpMethod")) {


graphRequest.setHttpMethod(HttpMethod.valueOf(configMap.getString("httpMethod")));
    }
    if (configMap.hasKey("version")) {
        graphRequest.setVersion(configMap.getString("version"));
    }
    if (configMap.hasKey("accessToken")) {
        graphRequest.setAccessToken(new AccessToken(
            configMap.getString("accessToken"),
            AccessToken.getCurrentAccessToken().getApplicationId(),
            AccessToken.getCurrentAccessToken().getUserId(),
            null,
            null,
            null,
            null,
            null));
    } else {
        graphRequest.setAccessToken(AccessToken.getCurrentAccessToken());
    }
}

更确切地说,

代码语言:javascript
复制
if (configMap.hasKey("accessToken")) {
            graphRequest.setAccessToken(new AccessToken(
                configMap.getString("accessToken"),
                AccessToken.getCurrentAccessToken().getApplicationId(),
                AccessToken.getCurrentAccessToken().getUserId(),
                null,
                null,
                null,
                null,
                null));

我的Java技能不存在,所以我不知道如何解决这个问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-24 14:22:30

我今天也遇到了同样的问题,将react-native-fbsdk升级到0.8.0似乎可以解决这个问题

票数 17
EN

Stack Overflow用户

发布于 2018-10-24 17:29:43

我今天也遇到了这个问题,并通过修改包来拥有最后一个参数- dataAccessExpirationTime解决了这个问题。

代码语言:javascript
复制
new AccessToken(
            configMap.getString("accessToken"),
            AccessToken.getCurrentAccessToken().getApplicationId(),
            AccessToken.getCurrentAccessToken().getUserId(),
            null,
            null,
            null,
            null,
            null,
            null)

您将在FBGraphRequestModule.java和Utility.java文件中看到此问题。所以请修复这两个文件。

票数 1
EN

Stack Overflow用户

发布于 2018-12-06 04:27:10

我也有同样的问题,我的理解是react-native-fbsdk v0.7.0没有锁定依赖的次要版本com.facebook.android:facebook-android-sdk。请参见node_modules/react-native-fbsdk/android/中的compile 'com.facebook.android:facebook-android-sdk:4+'。脸书发布了一个新版本的4.38.1,之前已知的工作版本是4.37.0。由于次要版本未锁定,较新版本的com.facebook.android:facebook-android-sdk:4被拉下并导致损坏。

升级到react-native-fbsdkv0.8.0和com.facebook.android:facebook-android-sdk:4.38.1更改了二进制包,迫使我们进行完整的应用程序更新(而不仅仅是通过代码推送更新UI内容)。我们试图限制二进制版本,因为它们更大,而且我们的用户不会被迫更新应用程序。

强制解析为我们工作的com.facebook.android:facebook-android-sdk:4+版本

在根build.gradle文件中,添加或合并以下内容

代码语言:javascript
复制
allprojects {
    configurations.all {
        resolutionStrategy {
            force 'com.facebook.android:facebook-android-sdk:4.37.0'
        }
    }
}

Ref:这篇文章描述了动态依赖的一些缺点。我建议当你包含一个新的模块时,锁定所有的动态依赖。这将有助于确保每次重建都会产生可预测的输出。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52961670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档