Android的Facebook的单点登录错误 [英] Android Facebook Single Sign On error

查看:432
本文介绍了Android的Facebook的单点登录错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想实现的Facebook SSO在我的Andr​​oid app.It打开原生的Facebook应用程序,登录过程完成后,显示500:内部服务器错误?。什么我做错了。

任何建议将高​​度AP preciated。
这里是我的code

 公共类FacebookUtil {    公共静态正在使用Facebook =新的Facebook(AppConstants.FACEBOOK_APP_ID);
    字符串文件名=AndroidSSO_data;
    私人静态共享preferences米preFS;
    私有静态语境mContext;
    私有静态布尔isSucess;
    私有静态FacebookSucessListener mFacebookSucessListener;
     公共静态最后弦乐FB_APP_SIGNATURE =xxxxxxxxxxxxxxxxxxx;
    公共接口FacebookSucessListener {
        公共无效onSucess(布尔isSucess);
    }
    公共静态无效postToWall(){
        facebook.dialog(mContext,饲料,新DialogListener(){
            公共无效onCancel(){            }
            公共无效的onComplete(捆绑为arg0){            }            公共无效onerror的(DialogError为arg0){            }            公共无效onFacebookError(FacebookError为arg0){            }});
    }    / *
     *功能更新状态
     * @参数Facebook的acesstoken接取令牌
     * @参数字符串消息发布
     * /
    公共静态无效updateStatus(字符串的accessToken,最后弦乐aMsgToShare){
        尝试{
            束束=新包();
            bundle.putString(信息,aMsgToShare);
            bundle.putString(Facebook.TOKEN,的accessToken);
            字符串的响应= facebook.request(ME /饲料,捆绑,POST);
            如果(response.contains(重复状态消息))
                Toast.makeText(mContext,重复信息不能发布,Toast.LENGTH_SHORT).show();
            否则,如果(response.contains(以下简称用户未授权应用程序来执行此操作))
                Toast.makeText(mContext的用户无权执行此操作的应用程序,Toast.LENGTH_SHORT).show();
            其他
                Toast.makeText(mContext发布Successfuly,Toast.LENGTH_SHORT).show();
        }赶上(MalformedURLException的E){
            Log.e(不正确的网址,+ e.getMessage());        }赶上(IOException异常五){        }
    }
    / *
     *为了从Facebook注销
     * @参数活动活动
     *返回响应
     * /
    公共静态字符串logoutFacebook(活动aActivity){
        串resonse =;
        尝试{
            串响应= facebook.logout(aActivity.getApplicationContext());
        }赶上(例外五){
            Log.e(LogoutException,+ e.getMessage());
        }
        返回resonse;
    }
    / *
     *要启动Facebook的登录过程
     * @参数活动活动
     * @参数共享preferences preF
     *在sucess虚假的情况下返回true,否则
     * /
    公共静态无效startLoginProcess(最终活动aActivity,最终共享preferences米preFS,FacebookSucessListener facebookSucessListener)
    {
        尝试{
            mFacebookSucessListener = facebookSucessListener;
        }赶上(例外五){}        / *
         *可获得现有ACCESS_TOKEN如果有的话
         * /
        mContext = aActivity;
        字符串的access_token = M prefs.getString(fb_access_token,NULL);
        长到期= M prefs.getLong(fb_expire_time,0);
        如果(ACCESS_TOKEN!= NULL){
            facebook.setAccessToken(的access_token);
        }
        如果(到期!= 0){
            facebook.setAccessExpires(到期);
        }
        布尔isSessionValid = facebook.isSessionValid();
        如果(!isSessionValid)
        {
            //Facebook.FORCE_DIALOG_AUTH
            facebook.authorize(aActivity,AppConstants.permissions,1,新DialogListener(){
                公共无效的onComplete(束值){
                    字符串标记= values​​.getString(Facebook.TOKEN);
                    共享preferences.Editor编辑= M prefs.edit();
                    editor.putString(fb_access_token,facebook.getAccessToken());
                    editor.putLong(fb_expire_time,facebook.getAccessExpires());
                    editor.putBoolean(is_fb_logged_in,真正的);
                    editor.commit();
                    mFacebookSucessListener.onSucess(真);
                }                公共无效onFacebookError(FacebookError错误){
                    mFacebookSucessListener.onSucess(假);
                    Log.e(脸谱-onFacebookError,error.getMessage());
                    Toast.makeText(aActivity,错误:+ error.getMessage(),600).show();
                }
                公共无效onerror的(DialogError E){
                    mFacebookSucessListener.onSucess(假);
                    Log.e(脸谱-的onError,e.getMessage());
                    Toast.makeText(aActivity,错误:+ e.getMessage(),600).show();                }                公共无效onCancel(){                }
            });
        }
        其他{
            mFacebookSucessListener.onSucess(真);
        }
    }
    最后一类PostDialogListener实现DialogListener {
        公共无效的onComplete(束值){        }        公共无效onFacebookError(FacebookError错误){
            Log.e(脸谱-onFacebookError,error.getMessage());
        }        公共无效onerror的(DialogError错误){
            Log.e(脸谱-onFacebookError,error.getMessage());
        }        公共无效onCancel(){        }
    }
}


解决方案

最后,我解决我的problem.The已关键,我是通过CMD窗口7生成,是错误的。
所以我这样做编程。

 私人无效getHashKey()
{
        PackageInfo信息;
        尝试{
        信息= getPackageManager()getPackageInfo(你的应用程序包名,PackageManager.GET_SIGNATURES)。
        对(签字签名:info.signatures){
                   消息摘要MD;
        MD = MessageDigest.getInstance(SHA);
        md.update(signature.toByteArray());
                   //字符串的东西=新的String(Base64.en code(md.digest(),0));
                     字符串的东西=新的String(Base64.en code(md.digest(),0));
                   Log.e(****散列键的东西);
        }
        }
        赶上(E1的NameNotFoundException){
        Log.e(找不到名称,e1.toString());
        }        赶上(抛出:NoSuchAlgorithmException E){
        Log.e(没有这样的算法,e.toString());
        }
        赶上(例外五){
        Log.e(异常,e.toString());
        }}

I am trying to implement Facebook SSO in my android app.It opens native Facebook app, after login process complete it shows "500: internal server error".What I am doing wrong?

Any suggestion will be highly appreciated . Here is my code

public class FacebookUtil {

    public static Facebook facebook = new Facebook(AppConstants.FACEBOOK_APP_ID);
    String FILENAME = "AndroidSSO_data";
    private static SharedPreferences mPrefs;
    private static Context mContext;
    private static  boolean isSucess;
    private static FacebookSucessListener mFacebookSucessListener;
     public static final String FB_APP_SIGNATURE ="xxxxxxxxxxxxxxxxxxx"; 
    public interface FacebookSucessListener {
        public void onSucess(boolean isSucess);
    }
    public static void postToWall(){
        facebook.dialog(mContext, "feed" , new DialogListener(){
            public void onCancel() {

            }
            public void onComplete(Bundle arg0) {

            }

            public void onError(DialogError arg0) {

            }

            public void onFacebookError(FacebookError arg0) {

            }});
    }

    /*
     * Function to update status
     * @param facebook acesstoken acess token
     * @param  String message to post
     */
    public static void updateStatus(String accessToken, final String aMsgToShare){
        try {
            Bundle bundle = new Bundle();
            bundle.putString("message", aMsgToShare);
            bundle.putString(Facebook.TOKEN, accessToken);
            String response = facebook.request("me/feed",bundle,"POST");
            if(response.contains("Duplicate status message"))
                Toast.makeText(mContext, "Duplicate message can not post", Toast.LENGTH_SHORT).show();
            else if (response.contains("The user hasn't authorized the application to perform this action"))
                Toast.makeText(mContext, "The user hasn't authorized the application to perform this action",Toast.LENGTH_SHORT).show();
            else
                Toast.makeText(mContext,"Posted Successfuly", Toast.LENGTH_SHORT).show();
        } catch (MalformedURLException e) {
            Log.e("MALFORMED URL",""+e.getMessage());

        } catch (IOException e) {

        }
    }
    /*
     * To logout from facebook
     * @param Activity activity
     * return response
     */
    public static String logoutFacebook(Activity aActivity){
        String resonse = "";
        try {
            String response = facebook.logout(aActivity.getApplicationContext());
        } catch (Exception e) {
            Log.e("LogoutException",""+e.getMessage());
        }
        return resonse;
    }


    /*
     * TO start the  facebook login process
     * @param Activity activity
     * @param SharedPreferences pref
     * return true in case of sucess false otherwise
     */
    public static void startLoginProcess(final Activity aActivity,final SharedPreferences mPrefs,FacebookSucessListener facebookSucessListener)
    {
        try{
            mFacebookSucessListener = facebookSucessListener;
        }catch(Exception e){}

        /*
         * Get existing access_token if any
         */
        mContext=aActivity;
        String access_token = mPrefs.getString("fb_access_token", null);
        long expires = mPrefs.getLong("fb_expire_time", 0);
        if(access_token != null) {
            facebook.setAccessToken(access_token);
        }
        if(expires != 0) {
            facebook.setAccessExpires(expires);
        }
        boolean isSessionValid  = facebook.isSessionValid();
        if(!isSessionValid)
        {
            //Facebook.FORCE_DIALOG_AUTH
            facebook.authorize( aActivity, AppConstants.permissions, 1, new DialogListener() {
                public void onComplete(Bundle values) {
                    String token = values.getString(Facebook.TOKEN);
                    SharedPreferences.Editor editor = mPrefs.edit();
                    editor.putString("fb_access_token", facebook.getAccessToken());
                    editor.putLong("fb_expire_time", facebook.getAccessExpires());
                    editor.putBoolean("is_fb_logged_in", true);
                    editor.commit();
                    mFacebookSucessListener.onSucess(true);
                }

                public void onFacebookError(FacebookError error) {
                    mFacebookSucessListener.onSucess(false);
                    Log.e("Facebook-onFacebookError", error.getMessage());
                    Toast.makeText(aActivity, "Error: "+ error.getMessage(), 600).show();
                }
                public void onError(DialogError e) {
                    mFacebookSucessListener.onSucess(false);
                    Log.e("Facebook-onError", e.getMessage());
                    Toast.makeText(aActivity, "Error: "+ e.getMessage(), 600).show();

                }

                public void onCancel() {

                }
            });
        }
        else {
            mFacebookSucessListener.onSucess(true);
        }


    }
    final class PostDialogListener implements DialogListener {
        public void onComplete(Bundle values) {

        }

        public void onFacebookError(FacebookError error) {
            Log.e("Facebook-onFacebookError", error.getMessage());
        }

        public void onError(DialogError error) {
            Log.e("Facebook-onFacebookError", error.getMessage());
        }

        public void onCancel() {

        }
    }


}

解决方案

Finally I solved my problem.The Has key, I was generating through CMD in window 7, was wrong. So I did this programmatically.

private void getHashKey()
{
        PackageInfo info;
        try {
        info = getPackageManager().getPackageInfo("your app package name", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
                   MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
                   //String something = new String(Base64.encode(md.digest(), 0));
                     String something = new String(Base64.encode(md.digest(),0));
                   Log.e("**** Hash Key", something);
        } 
        }
        catch (NameNotFoundException e1) {
        Log.e("name not found", e1.toString());
        }

        catch (NoSuchAlgorithmException e) {
        Log.e("no such an algorithm", e.toString());
        }
        catch (Exception e){
        Log.e("exception", e.toString());
        }

}

这篇关于Android的Facebook的单点登录错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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