Facebook的登录后不会再回来,但再次询问登录 [英] Facebook after login not coming back but asking login again

查看:197
本文介绍了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 is available for all user now.

一切工作正常与我,如果原生的Facebook应用程序是安装在我的手机。但是,如果本机应用程序没有安装那么它将填充登录信息就问我点击确定按钮再次要求我登录后授权后打开Facebook的web视图。而这一过程将继续。

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*.

下面是我的屏幕截图。

Here is my screen shot.

下面是第二个截屏

点击OK,然后之后它再次要求我登录。这是循环登录 - 批准─登录..
这里是我的全code:

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

我用我自己的按钮,所以我不添加XML code。

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);
}

}

我也越来越哈希键..这里是code哈希键

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) {

    }
}  

的Andr​​oidManifest.xml

我还添加上网权限元数据为Facebook。

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.

推荐答案

u需要一个图书馆的 easyfacebookandroidsdk.jar ,并建立它在乌拉圭回合的项目

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

使用code:

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和放大器;在code更换。我总是用code每当我有张贴在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.

在清单中给予上网权限
&LT;使用-权限的Andr​​oid:名称=android.permission.INTERNET对/&GT;

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

这就是所有

干杯

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

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