Android的登录与Facebook SDK 4.0 [英] Android Login with Facebook SDK 4.0
问题描述
我希望有人能帮助我!我想改变我的code为新的Facebook SDK 4.0,但只有一点点的描述和i'm越来越疯狂和鸵鸟政策知道如何使新的code与Facebook的登录按钮,accesstoken
目标这一code是用户与自己的Facebook帐户,如果用户已经退出检查日志中。如果没有则插入带有电子邮件和Facebook的ID和名称的新用户
我已标记codeS需要与//被改变和//需要改变完
感谢名单提前任何帮助!
进口com.facebook.AccessToken;
进口com.facebook.CallbackManager;
进口com.facebook.FacebookCallback;
进口com.facebook.FacebookException;
进口com.facebook.FacebookSdk;
进口com.facebook.login.LoginResult;
进口com.facebook.login.widget.LoginButton;
//进口com.facebook.Request;
//进口com.facebook.Request.GraphUserCallback;
//进口com.facebook.Response;
//进口com.facebook.Session;
//进口com.facebook.SessionState;
//进口com.facebook.UiLifecycleHelper;
//进口com.facebook.model.GraphUser;
//进口com.facebook.widget.LoginButton;
@燮pressLint(NewApi)
公共类AuthenticationFragment扩展片段{
LoginButton facebookLoginButton;
//私人UiLifecycleHelper uiHelper;
字符串变量=片段;
按钮btnLogin,btnCreateAccount;
ProgressDialog dialogPrg;
字符串username = NULL;
//新的Facebook添加
CallbackManager callbackManager;
公共静态最终AuthenticationFragment的newInstance(){
// TODO自动生成构造函数存根
AuthenticationFragment片段=新AuthenticationFragment();
返回片段;
}
@覆盖
公共无效onAttach(活动活动){
// TODO自动生成方法存根
super.onAttach(活动);
}
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,
捆绑savedInstanceState){
// TODO自动生成方法存根
查看查看= inflater.inflate(R.layout.authentication_layout,集装箱,
假);
facebookLoginButton =(LoginButton)查看
.findViewById(R.id.btnFacebookLogin);
facebookLoginButton.setFragment(本);
facebookLoginButton.setReadPermissions(Arrays.asList(电子邮件));
//新增为Facebook
//回调注册
facebookLoginButton.registerCallback(callbackManager,新FacebookCallback< LoginResult>(){
@覆盖
公共无效的onSuccess(LoginResult loginResult){
//应用code
//登录确定可以访问令牌
AccessToken.getCurrentAccessToken();
}
@覆盖
公共无效OnCancel的(){
//应用code
Log.i(TAG,Facebook的登录取消);
}
@覆盖
公共无效onerror的(FacebookException除外){
//应用code
Log.i(TAG,Facebook的登录失败错误);
}
});
//新增为Facebook END
btnLogin =(按钮)view.findViewById(R.id.btn_login);
btnCreateAccount =(按钮)view.findViewById(R.id.btn_create_account);
btnLogin.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
意向意图=新的意图(getActivity(),LoginActivity.class);
startActivity(意向);
}
});
btnCreateAccount.setOnClickListener(新View.OnClickListener(){
@覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
意向意图=新的意图(getActivity()
CreateAccountActivity.class);
startActivity(意向);
}
});
dialogPrg =新ProgressDialog(getActivity());
dialogPrg.setCanceledOnTouchOutside(假);
返回查看;
}
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
// uiHelper =新UiLifecycleHelper(getActivity(),回调);
// uiHelper.onCreate(savedInstanceState);
}
//需要改变
私人Session.StatusCallback回调=新Session.StatusCallback(){
@覆盖
公共无效电话(最后一届会议,最后SessionState会的状态,
最终的异常除外){
onSessionStateChange(会话,状态除外);
}
};
//需要改变END
私人无效onSessionStateChange(会话的会话,SessionState会的状态,
例外的例外){
如果(state.isOpened()){
Log.i(FB AUT片段,已登录......);
}否则如果(state.isClosed()){
Log.i(FB AUT片段,注销...);
}
}
//需要改变
私人无效insertUser(会话的会话){
Request.newMeRequest(会话,新GraphUserCallback(){
@覆盖
公共无效onCompleted(GraphUser用户,响应响应){
// TODO自动生成方法存根
新facebookUserCheck(用户)。开始();
}
})executeAsync()。
}
//需要改变END
//需要改变
私有类facebookUserCheck继承Thread {
GraphUser用户;
公共facebookUserCheck(GraphUser用户){
// TODO自动生成构造函数存根
this.user =用户;
}
//需要改变
@覆盖
公共无效的run(){
// TODO自动生成方法存根
super.run();
// TODO自动生成方法存根
字符串handleInsertUser = getActivity()。getResources()的getString(
R.string.users_json_url)
+facebook_user_check;
尝试 {
HttpClient的客户端=新DefaultHttpClient();
HttpPost后=新HttpPost(handleInsertUser);
MultipartEntity reqEntity =新MultipartEntity();
//需要改变user.getId
reqEntity.addPart(fb_id,新StringBody(user.getId()));
//需要改变END
post.setEntity(reqEntity);
HTT presponse解析度= client.execute(后);
HttpEntity resEntity = res.getEntity();
最后弦乐response_str = EntityUtils.toString(resEntity);
如果(resEntity!= NULL){
Log.i(TAG,response_str);
getActivity()。runOnUiThread(新的Runnable(){
公共无效的run(){
尝试 {
dialogPrg.dismiss();
JSONArray jsonArray =新JSONArray(
response_str);
如果(jsonArray.length()== 1){
的JSONObject物镜= jsonArray.getJSONObject(0);
用户USER = Ultils.parseUser(OBJ);
UserSessionManager userSession =新UserSessionManager(
getActivity());
userSession.storeUserSession(用户);
意向意图=新的意图(getActivity()
HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(意向);
}
}赶上(例外五){
LayoutInflater充气= LayoutInflater
。从(getActivity());
查看promptsView = inflater.inflate(
R.layout.username_promtps_layout,NULL);
AlertDialog.Builder alertDialogBuilder =新AlertDialog.Builder(
getActivity());
//设置prompts.xml为alertdialog建设者
alertDialogBuilder.setView(promptsView);
最后的EditText消息=(EditText上)promptsView
.findViewById(R.id.editTextDialogUserInput);
alertDialogBuilder
.setMessage(getResources()的getString(
R.string.choose_your_user_name));
//设置对话框消息
alertDialogBuilder
.setCancelable(假)
.setPositiveButton(
getResources()。的getString(
R.string.ok_label)
新DialogInterface.OnClickListener(){
公共无效的onClick(
DialogInterface对话框,
INT编号){
如果(!验证
.validUserName(消息
.getText()
的ToString())){
的ShowDialog(getResources()
.getString(
R.string.invalid_user_name));
返回;
}
的userName =消息
.getText()
的ToString();
新facebookUserRegister(
用户)。开始();
}
});
//创建警报对话框
AlertDialog alertDialog = alertDialogBuilder
。创建();
// 展示下
alertDialog.show();
}
}
});
}
}赶上(例外五){
// TODO:处理异常
e.printStackTrace();
}
}
}
//需要改变
私有类facebookUserRegister继承Thread {
GraphUser用户;
公共facebookUserRegister(GraphUser用户){
// TODO自动生成构造函数存根
this.user =用户;
}
//需要改变END
@覆盖
公共无效的run(){
super.run();
getActivity()。runOnUiThread(新的Runnable(){
@覆盖
公共无效的run(){
// TODO自动生成方法存根
dialogPrg.show();
}
});
字符串handleInsertUser = getActivity()。getResources()的getString(
R.string.users_json_url)
+facebook_user_register;
尝试 {
HttpClient的客户端=新DefaultHttpClient();
HttpPost后=新HttpPost(handleInsertUser);
MultipartEntity reqEntity =新MultipartEntity();
//需要改变user.getId,user.getName,user.asMap
reqEntity.addPart(fb_id,新StringBody(user.getId()));
reqEntity.addPart(全名,新StringBody(user.getName()));
reqEntity.addPart(电子邮件,新StringBody(user.asMap()获得(电子邮件)的toString()));
//需要改变END
reqEntity.addPart(用户名,新StringBody(用户名));
post.setEntity(reqEntity);
HTT presponse解析度= client.execute(后);
HttpEntity resEntity = res.getEntity();
最后弦乐response_str = EntityUtils.toString(resEntity);
如果(resEntity!= NULL){
Log.i(TAG,response_str);
getActivity()。runOnUiThread(新的Runnable(){
公共无效的run(){
尝试 {
dialogPrg.dismiss();
JSONObject的jsonObj =新的JSONObject(
response_str);
如果(jsonObj.getString(正常)。等于(0)){
//显示错误的电子邮件;
的ShowDialog(getActivity()。getResources()
.getString(R.string.email_exist));
返回;
}
如果(jsonObj.getString(正常)。等于(1)){
//显示错误的用户名
的ShowDialog(getActivity()
.getResources()
.getString(R.string.user_name_exist));
返回;
}
如果(jsonObj.getString(正常)。等于(2)){
//显示未知的用户名
的ShowDialog(getActivity()。getResources()
.getString(R.string.login_failed));
返回;
}
}赶上(例外五){
JSONArray jsonArray;
尝试 {
jsonArray =新JSONArray(response_str);
如果(jsonArray.length()== 1){
JSONObject的OBJ = jsonArray
.getJSONObject(0);
用户USER = Ultils.parseUser(OBJ);
UserSessionManager userSession =新UserSessionManager(
getActivity());
userSession.storeUserSession(用户);
意向意图=新的意图(
getActivity(),
HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(意向);
}
}赶上(JSONException E1){
// TODO自动生成的catch块
e1.printStackTrace();
的ShowDialog(getActivity()。getResources()
.getString(R.string.login_failed));
}
}
}
});
}
}赶上(例外五){
// TODO:处理异常
e.printStackTrace();
}
}
}
//需要改变
@覆盖
公共无效onResume(){
super.onResume();
会话会话= Session.getActiveSession();
如果(会话= NULL和放大器;!及(session.isOpened()|| session.isClosed())){
onSessionStateChange(会话,session.getState(),NULL);
}
// uiHelper.onResume();
}
//需要改变END
@覆盖
公共无效onActivityResult(INT申请code,INT结果code,意图数据){
super.onActivityResult(要求code,因此code,数据);
//新的Facebook添加
callbackManager.onActivityResult(要求code,因此code,数据);
//新的Facebook加入END
// uiHelper.onActivityResult(要求code,因此code,数据);
//需要改变
如果(Session.getActiveSession()!=空
&功放;&安培; Session.getActiveSession()。isOpened()){
dialogPrg.setMessage(getActivity()。getResources()的getString(
R.string.loging));
dialogPrg.show();
facebookLoginButton.setEnabled(假);
insertUser(Session.getActiveSession());
}
}
//需要改变END
@覆盖
公共无效的onPause(){
super.onPause();
// uiHelper.onPause();
}
@覆盖
公共无效的onDestroy(){
super.onDestroy();
// uiHelper.onDestroy();
}
@覆盖
公共无效的onSaveInstanceState(包outState){
super.onSaveInstanceState(outState);
// uiHelper.onSaveInstanceState(outState);
}
公共无效的ShowDialog(字符串消息){
Ultils.logout(getActivity());
AlertDialog.Builder buidler =新AlertDialog.Builder(getActivity());
buidler.setMessage(消息);
buidler.setPositiveButton(
getActivity()。getResources()的getString(R.string.ok_label)
新DialogInterface.OnClickListener(){
@覆盖
公共无效的onClick(DialogInterface对话,诠释它){
// TODO自动生成方法
// 存根
facebookLoginButton.setEnabled(真正的);
}
});
AlertDialog对话框= buidler.create();
dialog.show();
}
}
正如你可以在的 Facebook的SDK为一款Android更新日志4.0 - 2015年3月25日的UiLifecycleHelper被删除,它的功能转移到CallbackManager
<一个href="http://$c$c.tutsplus.com/tutorials/quick-tip-add-facebook-login-to-your-android-app--cms-23837"相对=nofollow>这里是一个教程,说明如何实现与Facebook SDK登录4.0。
I hope anybody can help me ! I want to change my code for the new facebook sdk 4.0 but there is only a little description and i´m getting crazy and don´t know how to make the new code with facebook login button and accesstoken
target of this code is that the user logs in with his facebook account and checks if the user already exits. if not then insert new user with email and facebook id and name
I have marked the codes with //needs to be changed and //needs to be changed END
Thanx in advance for any help !!!
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
// import com.facebook.Request;
//import com.facebook.Request.GraphUserCallback;
// import com.facebook.Response;
// import com.facebook.Session;
// import com.facebook.SessionState;
//import com.facebook.UiLifecycleHelper;
// import com.facebook.model.GraphUser;
// import com.facebook.widget.LoginButton;
@SuppressLint("NewApi")
public class AuthenticationFragment extends Fragment {
LoginButton facebookLoginButton;
// private UiLifecycleHelper uiHelper;
String TAG = "Fragment";
Button btnLogin, btnCreateAccount;
ProgressDialog dialogPrg;
String userName = null;
// New Facebook Added
CallbackManager callbackManager;
public static final AuthenticationFragment newInstance() {
// TODO Auto-generated constructor stub
AuthenticationFragment fragment = new AuthenticationFragment();
return fragment;
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view = inflater.inflate(R.layout.authentication_layout, container,
false);
facebookLoginButton = (LoginButton) view
.findViewById(R.id.btnFacebookLogin);
facebookLoginButton.setFragment(this);
facebookLoginButton.setReadPermissions(Arrays.asList("email"));
// New added for Facebook
// Callback registration
facebookLoginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResult) {
// App code
//login ok get access token
AccessToken.getCurrentAccessToken();
}
@Override
public void onCancel() {
// App code
Log.i(TAG, "facebook login canceled");
}
@Override
public void onError(FacebookException exception) {
// App code
Log.i(TAG, "facebook login failed error");
}
});
//New added for Facebook END
btnLogin = (Button) view.findViewById(R.id.btn_login);
btnCreateAccount = (Button) view.findViewById(R.id.btn_create_account);
btnLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), LoginActivity.class);
startActivity(intent);
}
});
btnCreateAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent = new Intent(getActivity(),
CreateAccountActivity.class);
startActivity(intent);
}
});
dialogPrg = new ProgressDialog(getActivity());
dialogPrg.setCanceledOnTouchOutside(false);
return view;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// uiHelper = new UiLifecycleHelper(getActivity(), callback);
// uiHelper.onCreate(savedInstanceState);
}
// Needs to be changed
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(final Session session, final SessionState state,
final Exception exception) {
onSessionStateChange(session, state, exception);
}
};
// Needs to be changed END
private void onSessionStateChange(Session session, SessionState state,
Exception exception) {
if (state.isOpened()) {
Log.i("FB AUT FRAGMENT", "Logged in...");
} else if (state.isClosed()) {
Log.i("FB AUT FRAGMENT", "Logged out...");
}
}
// Needs to be changed
private void insertUser(Session session) {
Request.newMeRequest(session, new GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
new facebookUserCheck(user).start();
}
}).executeAsync();
}
// Needs to be changed END
// Needs to be changed
private class facebookUserCheck extends Thread {
GraphUser user;
public facebookUserCheck(GraphUser user) {
// TODO Auto-generated constructor stub
this.user = user;
}
// Needs to be changed
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
// TODO Auto-generated method stub
String handleInsertUser = getActivity().getResources().getString(
R.string.users_json_url)
+ "facebook_user_check";
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(handleInsertUser);
MultipartEntity reqEntity = new MultipartEntity();
// Needs to be changed user.getId
reqEntity.addPart("fb_id", new StringBody(user.getId()));
// Needs to be changed END
post.setEntity(reqEntity);
HttpResponse res = client.execute(post);
HttpEntity resEntity = res.getEntity();
final String response_str = EntityUtils.toString(resEntity);
if (resEntity != null) {
Log.i(TAG, response_str);
getActivity().runOnUiThread(new Runnable() {
public void run() {
try {
dialogPrg.dismiss();
JSONArray jsonArray = new JSONArray(
response_str);
if (jsonArray.length() == 1) {
JSONObject obj = jsonArray.getJSONObject(0);
User user = Ultils.parseUser(obj);
UserSessionManager userSession = new UserSessionManager(
getActivity());
userSession.storeUserSession(user);
Intent intent = new Intent(getActivity(),
HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
} catch (Exception e) {
LayoutInflater inflater = LayoutInflater
.from(getActivity());
View promptsView = inflater.inflate(
R.layout.username_promtps_layout, null);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
getActivity());
// set prompts.xml to alertdialog builder
alertDialogBuilder.setView(promptsView);
final EditText message = (EditText) promptsView
.findViewById(R.id.editTextDialogUserInput);
alertDialogBuilder
.setMessage(getResources().getString(
R.string.choose_your_user_name));
// set dialog message
alertDialogBuilder
.setCancelable(false)
.setPositiveButton(
getResources().getString(
R.string.ok_label),
new DialogInterface.OnClickListener() {
public void onClick(
DialogInterface dialog,
int id) {
if (!Validator
.validUserName(message
.getText()
.toString())) {
showDialog(getResources()
.getString(
R.string.invalid_user_name));
return;
}
userName = message
.getText()
.toString();
new facebookUserRegister(
user).start();
}
});
// create alert dialog
AlertDialog alertDialog = alertDialogBuilder
.create();
// show it
alertDialog.show();
}
}
});
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
// Needs to be changed
private class facebookUserRegister extends Thread {
GraphUser user;
public facebookUserRegister(GraphUser user) {
// TODO Auto-generated constructor stub
this.user = user;
}
// Needs to be changed END
@Override
public void run() {
super.run();
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
dialogPrg.show();
}
});
String handleInsertUser = getActivity().getResources().getString(
R.string.users_json_url)
+ "facebook_user_register";
try {
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(handleInsertUser);
MultipartEntity reqEntity = new MultipartEntity();
// Needs to be changed user.getId, user.getName, user.asMap
reqEntity.addPart("fb_id", new StringBody(user.getId()));
reqEntity.addPart("fullname", new StringBody(user.getName()));
reqEntity.addPart("email", new StringBody(user.asMap().get("email").toString()));
// Needs to be changed END
reqEntity.addPart("username", new StringBody(userName));
post.setEntity(reqEntity);
HttpResponse res = client.execute(post);
HttpEntity resEntity = res.getEntity();
final String response_str = EntityUtils.toString(resEntity);
if (resEntity != null) {
Log.i(TAG, response_str);
getActivity().runOnUiThread(new Runnable() {
public void run() {
try {
dialogPrg.dismiss();
JSONObject jsonObj = new JSONObject(
response_str);
if (jsonObj.getString("ok").equals("0")) {
// show error email;
showDialog(getActivity().getResources()
.getString(R.string.email_exist));
return;
}
if (jsonObj.getString("ok").equals("1")) {
// show error username
showDialog(getActivity()
.getResources()
.getString(R.string.user_name_exist));
return;
}
if (jsonObj.getString("ok").equals("2")) {
// show unknow username
showDialog(getActivity().getResources()
.getString(R.string.login_failed));
return;
}
} catch (Exception e) {
JSONArray jsonArray;
try {
jsonArray = new JSONArray(response_str);
if (jsonArray.length() == 1) {
JSONObject obj = jsonArray
.getJSONObject(0);
User user = Ultils.parseUser(obj);
UserSessionManager userSession = new UserSessionManager(
getActivity());
userSession.storeUserSession(user);
Intent intent = new Intent(
getActivity(),
HomeActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
showDialog(getActivity().getResources()
.getString(R.string.login_failed));
}
}
}
});
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
// Needs to be changed
@Override
public void onResume() {
super.onResume();
Session session = Session.getActiveSession();
if (session != null && (session.isOpened() || session.isClosed())) {
onSessionStateChange(session, session.getState(), null);
}
// uiHelper.onResume();
}
// Needs to be changed END
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// New Facebook added
callbackManager.onActivityResult(requestCode, resultCode, data);
//New Facebook added END
// uiHelper.onActivityResult(requestCode, resultCode, data);
// Needs to be changed
if (Session.getActiveSession() != null
&& Session.getActiveSession().isOpened()) {
dialogPrg.setMessage(getActivity().getResources().getString(
R.string.loging));
dialogPrg.show();
facebookLoginButton.setEnabled(false);
insertUser(Session.getActiveSession());
}
}
// Needs to be changed END
@Override
public void onPause() {
super.onPause();
// uiHelper.onPause();
}
@Override
public void onDestroy() {
super.onDestroy();
// uiHelper.onDestroy();
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// uiHelper.onSaveInstanceState(outState);
}
public void showDialog(String message) {
Ultils.logout(getActivity());
AlertDialog.Builder buidler = new AlertDialog.Builder(getActivity());
buidler.setMessage(message);
buidler.setPositiveButton(
getActivity().getResources().getString(R.string.ok_label),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method
// stub
facebookLoginButton.setEnabled(true);
}
});
AlertDialog dialog = buidler.create();
dialog.show();
}
}
As you can read in the Facebook SDK for Android changelog in section 4.0 - March 25, 2015 the UiLifecycleHelper was removed and its functionality transferred to the CallbackManager.
Here is a tutorial which explains how to implement the login with facebook SDK 4.0.
这篇关于Android的登录与Facebook SDK 4.0的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!