Syncano Android 使用自定义 class 的社交登录导致错误

Syncano Android Social Login with custom class results in error

Syncano 中的社交登录不适用于自定义配置文件。我使用 SocialAuthBackend.FACEBOOK 并传递带有自定义 class 的令牌,例如:

@SyncanoClass(name = "user_profile")
public class UserProfile extends AbstractUser {
}

一起为:

syncano.loginSocialUser(UserProfile.class, SocialAuthBackend.FACEBOOK, loginResult.getAccessToken().getToken()).sendAsync(new SyncanoCallback<UserProfile>() {
      //...
});

这导致:

IllegalArgumentException: field com.syncano.library.data.AbstractUser.profile has type com.syncano.library.data.Profile, got com.google.gson.internal.LinkedTreeMap
                                                                               at java.lang.reflect.Field.set(Native Method)
                                                                               at java.lang.reflect.Field.set(Field.java:557)
                                                                               at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.read(ReflectiveTypeAdapterFactory.java:119)
                                                                               at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:217)
                                                                               at com.google.gson.Gson.fromJson(Gson.java:861)
                                                                               at com.google.gson.Gson.fromJson(Gson.java:826)
                                                                               at com.google.gson.Gson.fromJson(Gson.java:775)
                                                                               at com.google.gson.Gson.fromJson(Gson.java:747)

无法使用此功能(或相关文档)修复它或在线找到任何示例。

当您想声明自己的用户配置文件时,您应该创建 2 class:

  1. 实施 AbstractUser<T>(其中 T 是您的个人资料 class 名称)
  2. 你自己的 class UserProfile class with extend Profile class (from syncano package).

示例代码:

    @SyncanoClass(name = "user_profile")
    public class MyUserProfile extends Profile {
        @SyncanoField(name = "avatar")
        public SyncanoFile avatar;
    }

    public class CustomUser extends AbstractUser<MyUserProfile> {
            public CustomUser(String login, String pass) {
                 super(login, pass);
             }
    }

即将发布:

从版本 4.0.6(尚未发布)开始,您不再需要配置文件中的 @SyncanoClass 注释(可选)。