Facebook SSO在Android中不工作 [英] Facebook SSO not working in android

查看:128
本文介绍了Facebook SSO在Android中不工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的应用程序中使用以下代码登录Facebook。我需要用Facebook SSO来做到这一点。我有正确的app_id。

I used the following code to Login through Facebook in my app. I need to do this with Facebook SSO. I have the correct app_id.

package com.fb.sso;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;

import com.facebook.android.AsyncFacebookRunner;
import com.facebook.android.AsyncFacebookRunner.RequestListener;
import com.facebook.android.DialogError;
import com.facebook.android.Facebook;
import com.facebook.android.Facebook.DialogListener;
import com.facebook.android.FacebookError;
import com.facebook.android.Util;

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.TextView;

public class FBSSOActivity extends Activity {
    /** Called when the activity is first created. */


    public static final String APP_ID = "my_app_id";

    private static final String[] PERMISSIONS = new String[] {
            "publish_stream", "read_stream", "offline_access" };
    private TextView mText;
    private Handler mHandler = new Handler();

    private Facebook mFacebook;
    private AsyncFacebookRunner mAsyncRunner;
    byte[] raw;
    private SharedPreferences mPrefs;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        if (APP_ID == null) {
            Util.showAlert(this, "Warning",
                    "Facebook Applicaton ID must be set...");
        }

        // Initialize the content view
        setContentView(R.layout.main);

        // Initialize the Facebook session
        mFacebook = new Facebook(APP_ID);
        mAsyncRunner = new AsyncFacebookRunner(mFacebook);

        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);
        if (access_token != null) {
            mFacebook.setAccessToken(access_token);
        }
        if (expires != 0) {
            mFacebook.setAccessExpires(expires);
        }

    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("FB Sample App", "onActivityResult(): " + requestCode);
        mFacebook.authorizeCallback(requestCode, resultCode, data);
    }



    private class LogoutRequestListener implements RequestListener {

        @Override
        public void onComplete(String response, Object state) {
            // TODO Auto-generated method stub

Log.v("comes here>>.","sucess");
            // Only the original owner thread can touch its views
            FBSSOActivity.this.runOnUiThread(new Runnable() {
                public void run() {
                    mText.setText("Thanks for using FB Sample App. Bye bye...");

                }
            });

            // Dispatch on its own thread
            mHandler.post(new Runnable() {
                public void run() {
                }
            });

        }

        @Override
        public void onIOException(IOException e, Object state) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFileNotFoundException(FileNotFoundException e,
                Object state) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onMalformedURLException(MalformedURLException e,
                Object state) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onFacebookError(FacebookError e, Object state) {
            // TODO Auto-generated method stub
            Log.v("facebook error","fb error");
        }
            }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main_menu, menu);
        return true;
    }


    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        MenuItem loginItem = menu.findItem(R.id.login);

        if (mFacebook.isSessionValid()) {
            loginItem.setTitle("Logout");


        } else {
            loginItem.setTitle("Login");


        }
        loginItem.setEnabled(true);
        return super.onPrepareOptionsMenu(menu);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {

        // Login/logout toggle
        case R.id.login:

            if (!mFacebook.isSessionValid()) {

                mFacebook.authorize(this, new DialogListener() {

                    @Override
                    public void onComplete(Bundle values) {
                        // TODO Auto-generated method stub

                        Log.v("Entered ", "No ERRRRRRRRRRRR");
                        SharedPreferences.Editor editor = mPrefs.edit();
                        editor.putString("access_token",
                                mFacebook.getAccessToken());
                        editor.putLong("access_expires",
                                mFacebook.getAccessExpires());
                        editor.commit();
                        Intent i=new Intent(FBSSOActivity.this,second.class);
                        startActivity(i);

                    }

                    @Override
                    public void onFacebookError(FacebookError e) {
                        // TODO Auto-generated method stub

                    }

                    @Override
                    public void onError(DialogError e) {
                        // TODO Auto-generated method stub

                    }

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

                    }

                });
            }else{

                mFacebook.setAccessToken(null);
                mFacebook.setAccessExpires(0);

                AsyncFacebookRunner asyncRunner = new AsyncFacebookRunner(mFacebook);
                 asyncRunner.logout(this.getBaseContext(), new  LogoutRequestListener());
            }

            break;


        default:
            return false;

        }
        return true;
    }

    }

我登录到预装的Facebook应用程序在我的设备我只有这个屏幕。

I logged in to preinstalled Facebook app in my device. And I got this screen only.

在我的Logcat中出现这一行。

And in my Logcat this line appears.

09-28 15:18:24.652: E/ActivityThread(1201): Failed to find provider info for com.facebook.katana.provider.AttributionIdProvider

如果我从我预装的Facebook应用程序中注销我的应用程序提示我登录,询问凭据。那个时候,空屏幕就出现了。但是在预装的Facebook应用程序中,我可以看到我的更新。(我已经登录)。

If I logged out from my preinstalled Facebook app, my application prompts me to login, asking the credentials. That time also, the empty screen appears.But in the preinstalled Facebook app, I can see my updates.( I get Logged in).

更新:

现在我正在检查该应用程序。我还没有发表到市场。参考这个网站 http ://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/ 。我把它添加到应用程序,像这样。

Right now I'm checking the app only. I have not published it to market. I got the key by referring this site http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/. And I added it to the app, like this.

更新2:
现在我在logcat中得到这些行:

Update 2: Now I got these lines in logcat:

09-29 12:00:12.552: I/ActivityManager(73): Starting activity: Intent { cmp=com.facebook.katana/.ProxyAuth (has extras) }
09-29 12:00:13.022: I/ActivityManager(73): Displayed activity com.facebook.katana/.ProxyAuth: 436 ms (total 436 ms)
09-29 12:00:15.032: W/InputManagerService(73): Starting input on non-focused client com.android.internal.view.IInputMethodClient$Stub$Proxy@434b2e88 (uid=10031 pid=2233)
09-29 12:00:15.032: W/IInputConnectionWrapper(2233): showStatusIcon on inactive InputConnection


推荐答案

由于以下原因,可能会发生这种情况:

This can happen due to the following reasons:


  1. 您没有连接到互联网

  2. 您没有授予互联网访问权限(Manifest.xml)

  3. 您没有使用正确的h

  4. 您没有提供正确的应用程式ID

  1. You are not connected to internet
  2. You have not given permission for internet access ( Manifest.xml)
  3. You have not used a correct hashkey for the app
  4. You did not provide a correct App Id

这篇关于Facebook SSO在Android中不工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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