在上一节中,我们介绍了使用Google登录的过程,在本节中,我们介绍了使用Facebook登录的过程。 此时,我们将跳过“邀请朋友”选项,因为那是所有博客帖子,而我们只能将该功能添加到已完成的应用程序中。
对于Google,我们将使用电子邮件作为唯一标识符,但Facebook可能不会公开用户名。 但是,Facebook确实有我们可以使用的“获取朋友” API调用,它的缺点是它只会返回已经加入该应用程序的朋友,因此我们将无法任意联系任何人。
入门–配置
Facebook的入门与Google的流程非常相似,您可以在此处进行了解。
您需要转到https://developers.facebook.com/apps/并注册以创建应用程序:
您需要针对Web,Android和iOS重复该过程(模拟器使用Web):
对于第一个平台,您需要输入应用名称:
并提供一些基本细节:
对于iOS,我们需要使用包ID,该ID与我们在Google+登录中使用的包ID完全相同,以便有效地识别iOS应用及其程序包名称:
您应该最终得到如下所示的内容:
Android流程非常相似,但在这种情况下,我们也需要活动名称。
重要提示:请注意屏幕截图中有一个错误,活动名称应与主类名称匹配,后跟单词Stub(大写s)。 在这种情况下,它应该是SocialChatStub。
就像在Google+上一样,我们需要生成一个哈希值以验证该应用程序确实是Facebook的应用程序,我们使用相同的keytool方法通过命令行进行此操作:
keytool -exportcert -alias (your_keystore_alias) -keystore (path_to_your_keystore) | openssl sha1 -binary | openssl base64
最后,您需要通过在应用程序的“状态和评论”页面中进行如下切换来发布Facebook应用程序:
项目配置
现在,我们需要在项目中设置一些重要的构建提示,以便其正常运行。 要设置构建提示,只需右键单击项目,选择项目属性,然后在Codename One部分中选择第二个选项卡。 将这些条目添加到表中:
facebook.appId=...
该应用程序ID将在您的Facebook应用程序页面的左上方显示。
编码
所以现在所有这些都准备就绪了,我们希望它可以与我们的应用一起使用...
添加事件处理以使用Facebook登录,例如:
loginWithFacebook.addActionListener((e) -> {
tokenPrefix = "facebook";
Login fb = FacebookConnect.getInstance();
fb.setClientId("739727009469185");
fb.setRedirectURI("http://www.codenameone.com/");
fb.setClientSecret("-------");
doLogin(fb, new FacebookData());
});
请注意,客户端ID,重定向,机密等都与模拟器登录相关,并且不会在本机Facebook登录生效的Android / iOS上使用。
与Google+实现类似,我们将基于上次定义的接口创建一个类来抽象Facebook连接:
static class FacebookData implements UserData {
String name;
String id;
@Override
public String getName() {
return name;
}
@Override
public String getId() {
return id;
}
@Override
public String getImage() {
return "http://graph.facebook.com/v2.4/" + id + "/picture";
}
@Override
public void fetchData(String token, Runnable callback) {
ConnectionRequest req = new ConnectionRequest() {
@Override
protected void readResponse(InputStream input) throws IOException {
JSONParser parser = new JSONParser();
Map<String, Object> parsed = parser.parseJSON(new InputStreamReader(input, "UTF-8"));
name = (String) parsed.get("name");
id = (String) parsed.get("id");
}
@Override
protected void postResponse() {
callback.run();
}
};
req.setPost(false);
req.setUrl("https://graph.facebook.com/v2.4/me");
req.addArgumentNoEncoding("access_token", token);
NetworkManager.getInstance().addToQueue(req);
}
}
这确实是微不足道的代码,我们只需连接到Facebook的Graph API并提供令牌即可。 从这里开始,只需解析返回的数据即可,该数据仅包含用户名和唯一ID的两个键,稍后我们可以在建立聊天时使用它们。
Facebook登录就是这样,下一次我们将进入访问联系人并显示UI界面中的联系人。
本系列其他文章
这是一系列持续不断的帖子,包括以下部分:
- 第1部分–初始用户界面
- 第2部分–使用Google登录
- 第3部分–使用Facebook登录
- 第4部分–联系人表格(即将发布)
翻译自: https://www.javacodegeeks.com/2015/08/building-a-chat-app-with-codename-one-part-3.html