我的應用程序是一個協作應用程序,用戶應該能夠將其寫入/讀入全局Realm文件以在它們之間共享數據。我還想在Realm文件中包含一些初始數據(realmObjects),這對所有用戶都是通用的。爲協作android應用程序創建一個全局領域文件
用戶將註冊,然後能夠創建數據並與所有用戶共享數據。初始數據只創建一次,應該可供所有用戶使用。
一旦他們在應用中註冊/登錄,我就無法爲每個新用戶分配用戶權限(寫入/讀取)。因爲查詢的公共數據創建的多個時間(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";
的UserManager類
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);
}
});
}
}
}
SplashActivity
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中包含「〜」,每個用戶也是如此。
有人能告訴我我做錯了什麼嗎?
感謝
謝謝。我正在使用開發者版本。我正在使用Realm Object Server Admin用戶登錄應用程序。我甚至使用管理員權限在ROS中創建了一個新用戶,並登錄到應用程序中。因此,兩個用戶都應該有權創建一個全局文件,但是不會創建全局文件。此外,ROS正在日誌中創建一個跟蹤。我將在下一條評論 – user274051
中包含[proxy]內部錯誤。代碼未定義,狀態:未定義,消息:SyntaxError:JSON位置0處的意外標記j在ProxyService.webSocketUpgradeHandler的Object.parse(native)處(/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)在HTTPParser.onParserExecute(_http_server.js:379:5)上的onParserExecuteCommon(_http_server.js:411:14)處的Server.emit(events.js:194:7)處的emitThree(events.js:116:13) – user274051
非常像https://stackoverflow.com/questions/44170810/realm-response-status-400 – geisshirt