Ios version of app works, but Android fails due to

2019-02-19 09:46发布

As mentioned in the title, the Ios version of this app works fine on a physical device. However, when I try to build it on an android device, I get an error

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)

This error is highlighted in FBGraphRequestModule.java file, specifically in this method

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

More specifically,

if (configMap.hasKey("accessToken")) {
            graphRequest.setAccessToken(new AccessToken(
                configMap.getString("accessToken"),
                AccessToken.getCurrentAccessToken().getApplicationId(),
                AccessToken.getCurrentAccessToken().getUserId(),
                null,
                null,
                null,
                null,
                null));

My Java skills are nonexistent, so I have no idea how to fix this problem.

3条回答
趁早两清
2楼-- · 2019-02-19 10:00

I had the same issue today as well, upgrading react-native-fbsdk to 0.8.0 seems to fix it

查看更多
成全新的幸福
3楼-- · 2019-02-19 10:04

I had also that issue today and solved by modifying the package to have the last parameter - dataAccessExpirationTime.

new AccessToken(
            configMap.getString("accessToken"),
            AccessToken.getCurrentAccessToken().getApplicationId(),
            AccessToken.getCurrentAccessToken().getUserId(),
            null,
            null,
            null,
            null,
            null,
            null)

You will see this issue in FBGraphRequestModule.java and Utility.java file. So please fix both files.

查看更多
该账号已被封号
4楼-- · 2019-02-19 10:09

I had the same issue, my understanding is that react-native-fbsdk v0.7.0 had not locked the minor version of the dependency com.facebook.android:facebook-android-sdk. see compile 'com.facebook.android:facebook-android-sdk:4+' in node_modules/react-native-fbsdk/android/. Facebook released a new version 4.38.1, previously known working version was 4.37.0. Because the minor version was not locked the newer version of com.facebook.android:facebook-android-sdk:4 was pulled down and caused breakage.

Upgrading to react-native-fbsdk v0.8.0 and com.facebook.android:facebook-android-sdk:4.38.1 changes the binary package, forcing us to do a full app update ( opposed to just a UI content updated via Code-Push ). We try to limit binary releases because they're larger and our users aren't forced to update the app.

Force resolving the version of com.facebook.android:facebook-android-sdk:4+ worked for us

In the root build.gradle file add or merge the following

allprojects {
    configurations.all {
        resolutionStrategy {
            force 'com.facebook.android:facebook-android-sdk:4.37.0'
        }
    }
}

Ref : This article describes some of the downsides to having dynamic dependancies. I suggest when you include a new module lock all the dynamic dependancies. This will help ensure every rebuild results in a predictable output.

查看更多
登录 后发表回答