如标题中所述,此应用程序的Ios版本在物理设备上可以正常工作。但是,当我尝试在Android设备上构建它时,出现错误
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文件中突出显示,特别是在此方法中
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());
}
}
更具体地说,
if (configMap.hasKey("accessToken")) {
graphRequest.setAccessToken(new AccessToken(
configMap.getString("accessToken"),
AccessToken.getCurrentAccessToken().getApplicationId(),
AccessToken.getCurrentAccessToken().getUserId(),
null,
null,
null,
null,
null));
我的Java技能不存在,所以我不知道如何解决此问题。
答案 0 :(得分:15)
我今天也遇到了同样的问题,将react-native-fbsdk
升级到0.8.0似乎可以解决
答案 1 :(得分:1)
我今天也遇到了这个问题,并通过将软件包修改为具有最后一个参数dataAccessExpirationTime来解决。
new AccessToken(
configMap.getString("accessToken"),
AccessToken.getCurrentAccessToken().getApplicationId(),
AccessToken.getCurrentAccessToken().getUserId(),
null,
null,
null,
null,
null,
null)
您将在FBGraphRequestModule.java和Utility.java文件中看到此问题。 因此,请修复两个文件。
答案 2 :(得分:1)
我遇到了同样的问题,我的理解是react-native-fbsdk v0.7.0尚未锁定依赖项com.facebook.android:facebook-android-sdk的次要版本。请参见compile 'com.facebook.android:facebook-android-sdk:4+'
中的node_modules/react-native-fbsdk/android/
。 Facebook发布了新版本4.38.1
,先前已知的工作版本为4.37.0
。由于未锁定次要版本,因此com.facebook.android:facebook-android-sdk:4
的较新版本被拉下并造成损坏。
升级到react-native-fbsdk v0.8.0和com.facebook.android:facebook-android-sdk:4.38.1
会更改二进制包,从而迫使我们进行完整的应用程序更新(与仅通过Code-Push更新的UI内容相反)。我们尝试限制二进制发行版,因为它们更大,并且我们的用户没有被迫更新应用程序。
强制解决com.facebook.android:facebook-android-sdk:4+
版本对我们有用
在root build.gradle文件中,添加或合并以下内容
allprojects {
configurations.all {
resolutionStrategy {
force 'com.facebook.android:facebook-android-sdk:4.37.0'
}
}
}
Ref:本文介绍了具有动态依赖关系的一些缺点。我建议当您包括一个新模块时,将锁定所有动态依赖关系。这将有助于确保每次重建都会产生可预测的输出。