Android的Facebook的单点登录错误 [英] Android Facebook Single Sign On error
本文介绍了Android的Facebook的单点登录错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想实现的Facebook SSO在我的Android 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屋!
查看全文