Java 为协作android应用程序创建全局域文件

Java 为协作android应用程序创建全局域文件,java,android,realm,android-database,realm-mobile-platform,Java,Android,Realm,Android Database,Realm Mobile Platform,我的应用程序是一个协作应用程序,用户应该能够写入/读取全局领域文件,以便在他们之间共享数据。我还想在Realm文件中包含一些初始数据(realmObjects),这些数据对所有用户都是通用的 用户将注册,然后能够创建数据并与所有用户共享数据。仅创建一次的初始数据应可供所有用户使用 在每个新用户注册/登录应用程序后,我无法将用户权限(写入/读取)分配给他们。公共数据是在查询之后多次创建的(realm.where(realmObject.class)).findall()即使已创建,也不会返回任何结

我的应用程序是一个协作应用程序,用户应该能够写入/读取全局领域文件,以便在他们之间共享数据。我还想在Realm文件中包含一些初始数据(realmObjects),这些数据对所有用户都是通用的

用户将注册,然后能够创建数据并与所有用户共享数据。仅创建一次的初始数据应可供所有用户使用

在每个新用户注册/登录应用程序后,我无法将用户权限(写入/读取)分配给他们。公共数据是在查询之后多次创建的(realm.where(realmObject.class)).findall()即使已创建,也不会返回任何结果

public static final String AUTH_URL     = "http://" + BuildConfig.OBJECT_SERVER_IP + ":9080/auth";
public static final String REALM_URL    = "realm://" + BuildConfig.OBJECT_SERVER_IP + ":9080/default";
用户管理器类

public class UserManager {

    // Supported authentication mode
    public enum AUTH_MODE {
        PASSWORD,
        FACEBOOK,
        GOOGLE
    }
    private static AUTH_MODE mode = AUTH_MODE.PASSWORD; // default

    public static void setAuthMode(AUTH_MODE m) {
        mode = m;
    }

    public static void logoutActiveUser() {
        switch (mode) {
            case PASSWORD: {
                break;
            }
            case FACEBOOK: {
                LoginManager.getInstance().logOut();
                break;
            }
            case GOOGLE: {
                break;
            }
        }
        SyncUser.currentUser().logout();
    }

    // Configure Realm for the current active user
    public static void setActiveUser(SyncUser user) {
        Realm.removeDefaultConfiguration();
        SyncConfiguration defaultConfig = new SyncConfiguration.Builder(user, REALM_URL).name("Realm").schemaVersion(0).build();
        Realm.setDefaultConfiguration(defaultConfig);
        setDefaultPermissionsRealm(user);
    }

    private static void setDefaultPermissionsRealm(SyncUser user){
        if (user.getIdentity().toString().equals(PRIVILAGE)){

            Realm realm = user.getManagementRealm();
            realm.executeTransaction(new Realm.Transaction() {
                @Override
                public void execute(Realm realm) {
                    Boolean mayRead = true; // Grant read access
                    Boolean mayWrite = true; // Keep current permission
                    Boolean mayManage = false; // Revoke management access
                    PermissionChange change = new PermissionChange(REALM_URL,
                            "*",
                            mayRead,
                            mayWrite,
                            mayManage);
                    realm.insert(change);
                }
            });
        }
    }
}
喷溅活动

SyncUser.loginAsync(SyncCredentials.usernamePassword(eMail, password, true), AUTH_URL, new SyncUser.Callback() {
                @Override
                public void onSuccess(SyncUser syncUser) {
                    loginRegistrationSuccess = true;
                    registrationComplete(syncUser);
                }

                @Override
                public void onError(ObjectServerError error) {
                    loginRegistrationSuccess = false;
                }
            });

facebookAuthRegistration    = new FacebookAuth((LoginButton) findViewById(R.id.sign_up_facebook), this) {
           @Override
           public void onRegistrationComplete(final LoginResult loginResult, User userInfo) {
               UserManager.setAuthMode(UserManager.AUTH_MODE.FACEBOOK);
               SyncCredentials credentials = SyncCredentials.facebook(loginResult.getAccessToken().getToken());
               SyncUser.loginAsync(credentials, AUTH_URL, SplashScreenActivity.this);
           }
        };

        googleAuthRegistration      = new GoogleAuth((Button) findViewById(R.id.sign_up_google), this, googleAuthLogin.getmGoogleApiClient()) {
            @Override
            public void onRegistrationComplete(GoogleSignInResult result) {
                UserManager.setAuthMode(UserManager.AUTH_MODE.GOOGLE);
                GoogleSignInAccount acct    = result.getSignInAccount();
                SyncCredentials credentials = SyncCredentials.google(acct.getIdToken());
                SyncUser.loginAsync(credentials, AUTH_URL, SplashScreenActivity.this);
            }
        };

@Override
    public void onSuccess(SyncUser syncUser) {
        loginRegistrationSuccess = true;
        showProgress(false);
        registrationComplete(syncUser);
    }

private void registrationComplete(SyncUser syncUser) {
        UserManager.setActiveUser(syncUser);
        Intent mainIntent = new Intent(SplashScreenActivity.this, MainActivity.class);
        mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        SplashScreenActivity.this.startActivity(mainIntent);
        SplashScreenActivity.this.finish();
    }
看起来好像我正在为每个用户创建一个不同的领域,即使我没有在URL中包含“~”

谁能告诉我我做错了什么


感谢

首先,您需要使用管理员用户创建领域,并设置所有其他用户可以访问它的权限。如果您使用的是Pro edition,您可以使用小型node.js脚本创建领域。或者,您可以创建一个小型内部应用程序,其唯一目的是使用管理员u创建领域瑟


用户只允许在其主目录中创建领域(
~
)但是他们可以与其他用户共享。这样做,您必须分发第一个用户的用户id。

最初,您需要使用admin用户创建域,并设置所有其他用户可以访问的权限。如果您使用的是Pro edition,您可以使用一个小node.js脚本创建域。或者,您可以创建一个小型的内部应用程序,其唯一目的是使用管理员用户创建领域


用户只允许在其主目录中创建领域(
~
)但是他们可以与其他用户共享。这样做,您必须分发第一个用户的用户id。

谢谢。我正在使用开发者版。我正在使用Realm Object Server管理员用户登录应用程序。我甚至在ROS中创建了一个具有管理员权限的新用户,并登录到应用程序。因此,两个用户都应该拥有该权限e创建一个全局文件,但没有创建任何全局文件。此外,ROS正在日志点击中创建跟踪。我将包含在下一个注释[proxy]内部错误中。代码未定义,状态:未定义,消息:SyntaxeError:ProxyService.webSocketUpgradeHandler的Object.parse(本机)位置0处JSON中的意外标记j(/usr/lib/nodejs/realm object server developer/.build/src/node/services/proxy.js:104:30)在ProxyService.safeUpgrade(/usr/lib/nodejs/realm object server developer/.build/src/node/services/proxy.js:78:12)在emitThree(events.js:116:13)在server.emit(events.js:194:7)在onParserExecuteCommon(_http_.js:411:14)在HTTPParser.onParserExecute(_http_server.js:379:5)看起来非常感谢。我正在使用开发者版。我正在使用Realm Object Server管理员用户登录应用程序。我甚至在ROS中创建了一个具有管理员权限的新用户,并登录到应用程序。因此,两个用户都应该有权创建全局文件,但没有创建全局文件。此外,ROS正在创建一个tra日志点击中的ce。我将包含在下一个注释[proxy]内部错误中。代码未定义,状态:未定义,消息:SyntaxError:ProxyService.webSocketUpgradeHandler的Object.parse(本机)位置0处JSON中的意外标记j(/usr/lib/nodejs/realm Object server developer/.build/src/node/services/proxy.js:104:30)在emitThree(events.js:116:13)在server.emit(events.js:194:7)在onParserExecuteCommon(http_server.js:411:14)在HTTPParser.onParserExecute(_http_server.js:379:5)看起来非常像