Facebook登录后不回来,但要求再次登录 [英] Facebook after login not coming back but asking login again

查看:192
本文介绍了Facebook登录后不回来,但要求再次登录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在我的应用程序中实现Facebook登录功能,并在发布权限后获取令牌。

I am trying to implement Facebook login functionality in my app and getting token after giving publish permission.

为此,我按照以下步骤。

For this I follow following steps.


  1. 在Facebook上创建应用程序(填写所有详细信息,如应用程序名称,哈希键(发布),类名称,包名称,单登录)

  1. Create app on Facebook(Fill all details like app name, Hash key(Release), Class name, Package Name, Single Sign On)

App现在可供所有用户使用。

App is available for all user now.

如果我的手机上安装了Native Facebook应用程序,我可以正常工作。但是如果原生的应用程序没有安装,那么在填写登录信息后会打开facebook webview,要求我在点击ok按钮再次要求我登录后授权。这个过程将继续下去。

Everything is working fine with me if Native Facebook app is install on my mobile. But if native app is not install then it will open facebook webview after filling login info it ask me to authorize after clicking on ok button it again asking me to login. And this process will continue.

****登录后,允许应用程序许可,它不会回到我的屏幕,但要求再次登录我****。

****After login and allowing app permission it's not coming back to my screen but it asking login me again****.

这是我的屏幕截图。

这是第二个屏幕截图

点击ok后,再次要求我登录。这是循环登录 - authorize- login ..

这是我的完整代码:

After clicking on ok then it's asking me again to login. It's loop login - authorize- login..
Here is my full code:

我正在使用我自己的按钮,所以我不添加xml代码。

I am using my own button so i am not adding xml code.

  public class FBActivity extends Activity {
Session.StatusCallback statusCallback = new SessionStatusCallback();

@Override
public void onCreate(Bundle savedInstanceState) {       
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.registartionwithmultiple);
    printHashKey();
    bundle = savedInstanceState;
    permissions = new ArrayList<String>();
    readpermissions = new ArrayList<String>();

    permissions.add("publish_actions");
    readpermissions.add("email");
    executeFacebookLogin();     
}       

private void executeFacebookLogin() {
     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);         
    Session session = Session.getActiveSession();
    if(session == null) {
        if(bundle != null) {
            Log.i("TEST","RESTORING FROM BUNDLE");
            session = Session.restoreSession(this, null, statusCallback, bundle);
        }
        if(session == null) {
            Log.i("TEST","CREATE NEW SESSION");
            session = new Session(this);
        }
        Session.setActiveSession(session);          
        session.addCallback(statusCallback);
        if(session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {

            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(readpermissions));

        } 
    }

    if(session.isClosed()) {
        session.closeAndClearTokenInformation();
        Session.setActiveSession(null);
    }
    if(!session.isOpened()) {

        session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(readpermissions));
        Log.i("FB Login ","Open for Publish");
    } else {
        Session.openActiveSession(this, true, statusCallback);
    }

}


private class SessionStatusCallback implements Session.StatusCallback {

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        //Check if Session is Opened or not
        processSessionStatus(session, state, exception);
    }
}

@SuppressWarnings("deprecation")
public void processSessionStatus(Session session, SessionState state, Exception exception) {
    Log.i("TEST","Session in process session "+session);
    if(session != null && session.isOpened()) {

        if(session.getPermissions().contains("publish_actions")) {
            //Show Progress Dialog 
            dialog = new ProgressDialog(this);
            dialog.setMessage("Loggin in..");
            dialog.show();
            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user, Response response) {


                    if (dialog!=null && dialog.isShowing()) {
                        dialog.dismiss();
                    }
                    if(user != null) {
                        Map<String, Object> responseMap = new HashMap<String, Object>();
                        GraphObject graphObject = response.getGraphObject();
                        responseMap = graphObject.asMap();
                        Log.i("FbLogin", "Response Map KeySet - " + responseMap.keySet());
                        // TODO : Get Email responseMap.get("email"); 

                        fb_id = user.getId();
                        fb_email = null;
                        user.getBirthday();
                        fb_userName = user.getUsername();
                        fb_fullname = user.getFirstName() +" "+user.getLastName();

                        String name = (String) responseMap.get("name");
                        if (responseMap.get("email")!=null) {
                            fb_email = responseMap.get("email").toString();
                            Log.i("TEST", "FB_ID="+fb_id +"email="+fb_email+"name="+name+"user_name="+user.getUsername()+"birthday="+user.getBirthday());
                            Session session = Session.getActiveSession();
                            tokenKey = session.getAccessToken();
                            SharedPreferenceStoring myPrefsClass = new SharedPreferenceStoring();
                            myPrefsClass.storingFBToken(FBActivity.this, tokenKey);

                            finish();

                        }
                        else {
                            //Clear all session info & ask user to login again
                            Session session = Session.getActiveSession();                               
                            if(session != null) {
                                session.closeAndClearTokenInformation();
                            }
                        }
                    }
                }
            });
        } else {

            session.requestNewPublishPermissions(new Session.NewPermissionsRequest(FBActivity.this, permissions));

        }
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.i("TEST","Activity result");
    super.onActivityResult(requestCode, resultCode, data);
    Log.d("FbLogin", "Result Code is - " + resultCode +"");
    Session.getActiveSession().onActivityResult(FBActivity.this, requestCode, resultCode, data);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    // TODO Save current session
    super.onSaveInstanceState(outState);
    Session session = Session.getActiveSession();
    Session.saveSession(session, outState);
}

}

我也得到哈希键..这里是哈希键的代码

I also getting hash key.. Here is code for hash key

private void printHashKey() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.myapp",
                PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:",
                    Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}  

我还在 AndroidManifest中添加 Internet权限面向Facebook的.xml 元数据

I also add Internet Permission in AndroidManifest.xml and meta-data for Facebook .

希望所有这些信息足够,如果需要更多的东西肯定会更新我的问题。

Hope all this information is sufficient if need any thing more will surely update my question.

请给我任何参考或提示。

Please give me any reference or hint.

推荐答案

图书馆 easyfacebookandroidsdk.jar ,并在ur中构建项目

u need a library easyfacebookandroidsdk.jar and build it up in ur project

使用以下代码:

public class MainActivity extends Activity implements LoginListener{

EditText et1;
 private FBLoginManager fbLoginManager;
Button b;

//replace it with your own Facebook App ID
public final String FacebookTesting="218874471621782";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et1=(EditText)findViewById(R.id.editText1);
b=(Button)findViewById(R.id.button1);
connectToFacebook();

}


public void connectToFacebook(){

  //read about Facebook Permissions here:
  //http://developers.facebook.com/docs/reference/api/permissions/
  String permissions[] = {
//          "user_about_me",  
//          "user_activities",
//          "user_birthday",
//          "user_checkins",
//          "user_education_history",   
//          "user_events",
//          "user_groups",
//          "user_hometown",
//          "user_interests",
//          "user_likes",
//          "user_location",
//          "user_notes",
//            "user_online_presence",
//          "user_photo_video_tags",
//          "user_photos",
//          "user_relationships",
//          "user_relationship_details",
//         "user_religion_politics",
//         "user_status", 
//         "user_videos",
//          "user_website",
//          "user_work_history",
//          "email",
//
//          "read_friendlists",
//          "read_insights",
//          "read_mailbox",
//          "read_requests",
//          "read_stream",
//          "xmpp_login",
//          "ads_management",
//          "create_event",
//          "manage_friendlists",
//          "manage_notifications",
//          "offline_access",
//          "publish_checkins",
    "publish_stream",
//          "rsvp_event",
//          "sms",
    //"publish_actions",

//          "manage_pages"

  };

  fbLoginManager = new FBLoginManager(this,
    R.layout.activity_main, 
    FacebookTesting, 
    permissions);

  if(fbLoginManager.existsSavedFacebook()){
   fbLoginManager.loadFacebook();
  }
  else{
   fbLoginManager.login();
  }
 }





@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}


 @Override
 protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data){


 fbLoginManager.loginSuccess(data);
 }

public void loginSuccess(Facebook facebook) {
//  GraphApi graphApi = new GraphApi(facebook);
 new getDataBackgroundThread().execute(facebook);
//    User user = new User();

//    try{
//     user = graphApi.getMyAccountInfo();
//
//     //update your status if logged in
//     graphApi.setStatus("Hello, world!");
//    } catch(EasyFacebookError e){
//     Log.d("TAG: ", e.toString());
//    }

//    fbLoginManager.displayToast("Hey, " + user.getFirst_name() + "! Login success!");
}

@Override
public void logoutSuccess() {
// TODO Auto-generated method stub

}


@Override
public void loginFail() {
// TODO Auto-generated method stub

}



 class getDataBackgroundThread extends AsyncTask<Facebook, Void, String> {

    private Exception exception;


    protected String doInBackground(Facebook... urls) {
        try{
             GraphApi graphApi = new GraphApi(urls[0]);

              User user = new User();

              try{
            //   user = graphApi.getMyAccountInfo();

               //update your status if logged in
               //graphApi.setStatus("My android App "+"VivekAppTest");
                  graphApi.setStatus("Hello "+"VivekAppTest");
              } catch(EasyFacebookError e){
               Log.d("TAG: ", e.toString());
              }
        return "posted";
        }
        catch (Exception e) {
            // TODO: handle exception
            return null;
        }


}
    protected void onPostExecute(String ipr) {
        // TODO: check this.exception 
        // TODO: do something with the feed
//
//               Intent i=new Intent(getApplicationContext(),MainActivity.class);
//               startActivity(i); 
//               finish();
//              Toast toast=Toast.makeText(getApplicationContext(),"Post Successful !", 1);
//              toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL,0, 130);
//              toast.show();
//          
    }
 }
}

获取您的Facebook应用程序ID&在代码中替换它。每当我必须在FB上发布文本时,我总是使用此代码。

Get your Facebook App id & replace it in the code. I always use this code whenever i have to post the text on FB.

在清单中给予Internet许可

uses-permission android:name =android.permission.INTERNET/>

In manifest give Internet permission
<uses-permission android:name="android.permission.INTERNET"/>

这些都是

干杯

这篇关于Facebook登录后不回来,但要求再次登录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆