介绍
编写移动应用程序时,您通常总是需要一种将信息存储在应用程序本身之外的方法,以便不仅可以在特定设备上访问应用程序本身的数据,而且还可以在安装了该应用程序的每个设备(甚至是Web应用程序)上访问数据。 这意味着应用程序将需要某种后端服务/ API与之通信。 这通常也意味着应用程序将使用某种帐户/用户管理。
有几种便利的移动后端即服务平台。 我认为“移动”一词有点放错地方,因为这些平台的客户端并不总是移动设备。 因此,我称这些平台为后端服务(BAAS)。 Parse.com是这些平台之一。
这篇文章讨论了使用Parse.com管理用户的方式,特别是如何使用匿名用户以及如何在匿名用户和注册用户之间进行转换。
匿名用户
许多应用程序要求用户注册(创建用户帐户)或使用Facebook或类似帐户登录。 如果这是必需的过程,则由于需要登录,因此某些用户有可能不会使用您的应用。 如果您的应用程序功能允许,则可能的解决方法是为该应用程序提供匿名用户登录名。 通过使用匿名用户,您的应用程序用户无需用户帐户即可体验该应用程序的全部或大部分功能。 如果用户喜欢您的应用程序,则可以注册一个注册帐户。 理想情况下,应该将匿名访问期间收集的所有数据转移到注册帐户中。 幸运的是,使用Parse.com平台可以轻松实现以上功能。
启用匿名访问
要使您的Parse.com应用程序能够使用匿名访问,您必须执行以下操作:
- 在Parse.com控制台中启用匿名访问。 转到设置->身份验证,然后启用“允许匿名访问”。
- 在Android Application类的onCreate方法中添加以下代码:
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "APPLICATION_ID", "CLIENT_KEY");
ParseUser.enableAutomaticUser();
}
通过启用自动用户,对ParseUser.getCurrentUser()的调用将始终返回用户,因此永远不会为null。 您可以使用以下代码检查用户是匿名用户还是注册用户:
ParseAnonymousUtils.isLinked(ParseUser.getCurrentUser());
这对于检查是否应该显示注册按钮或禁用某些仅注册用户可以访问的功能很有用。
将匿名用户转换为注册用户
匿名用户可以转换为注册用户。 属于匿名用户的数据也存在于已注册的用户中。
在转换匿名用户之前,需要考虑以下几点:
- 用户名不能为空。 您必须在要转换为注册用户的用户上明确指定用户名和密码。
- 建议将匿名用户在创建后立即保存到后端。 如果未完成此操作,并且已注册用户调用了saveInBackground(从匿名用户转换后),则Android解析SDK会产生堆栈溢出。 另请参阅有关堆栈溢出的以下问题(由我创建): http : //stackoverflow.com/questions/27595057/converting-an-anonymous-user-to-a-regular-user-and-saving
要在创建用户后立即保存它,请修改应用程序代码,使其如下所示:
@Override
public void onCreate() {
super.onCreate();
Parse.initialize(this, "APPLICATION_ID", "CLIENT_KEY");
ParseUser.enableAutomaticUser();
ParseUser.getCurrentUser.saveInBackground();
}
现在可以使用以下代码将匿名用户转换为注册用户:
findViewById(R.id.createUser).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
final String accountUsername = username.getText().toString();
final String accountPassword = password.getText().toString();
final ParseUser user = ParseUser.getCurrentUser();
user.setUsername(accountUsername);
user.setPassword(accountPassword);
user.signUpInBackground(new SignUpCallback() {
@Override
public void done(final ParseException e) {
if (e != null) {
Toast.makeText(MainActivity.this, "Signup Fail", Toast.LENGTH_SHORT).show();
Log.e(TAG, "Signup fail", e);
} else {
Toast.makeText(MainActivity.this, "Signup success", Toast.LENGTH_SHORT).show();
final ParseUser user = ParseUser.getCurrentUser();
user.put("phone_no", "31612345678");
user.saveInBackground(new SaveCallback() {
@Override
public void done(final ParseException e) {
if (e != null) {
Toast.makeText(MainActivity.this, "Save data Fail", Toast.LENGTH_SHORT).show();
Log.e(TAG, "Signup fail", e);
} else {
Toast.makeText(MainActivity.this, "Save data success", Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
}
})
请注意,在saveInBackground调用(成功注册后)中与用户关联的数据也可以在注册调用之前立即与用户关联。 这样可以节省额外的网络通话。 对saveInBackground的调用仅用于演示目的。
结论
这篇文章展示了移动应用程序的匿名用户的好处以及如何将匿名用户与Parse.com平台一起使用。 它还显示了有关如何将匿名用户转换为已注册用户的代码示例,以及潜在的问题和解决方案。
翻译自: https://www.javacodegeeks.com/2014/12/parse-com-anonymous-and-registered-users-android.html