本文介绍了与Facebook的最新SDK在Android Studio中整合Facebook的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在android系统工作的facebook集成。我一派,它的工作。但我不知道为什么,当我已经在我的手机的Facebook应用程序无法正常工作。
它是开放的Facebook登录页面时,我没有Facebook应用程序,在我的手机。

我的code:

  MainActivity:进口android.support.v7.app.ActionBarActivity;
进口android.os.Bundle;进口android.util.Base64;
进口android.view.Menu;
进口android.view.MenuItem;
进口android.view.View;
进口android.widget.Button;
进口android.provider.Settings;进口android.util.Log;进口com.facebook.CallbackManager;
进口com.facebook.FacebookCallback;
进口com.facebook.FacebookException;
进口com.facebook.FacebookSdk;
进口com.facebook.GraphRequest;
进口com.facebook.GraphResponse;
进口com.facebook.login.LoginManager;
进口com.facebook.login.LoginResult;
进口com.google.android.gms.common.ConnectionResult;
进口com.google.android.gms.common.GooglePlayServicesUtil;
进口com.google.android.gms.common.Scopes;
进口com.google.android.gms.common.api.GoogleApiClient;
进口com.google.android.gms.common.api.Scope;
进口com.google.android.gms.plus.Plus;
进口com.google.android.gms.plus.model.people.Person;进口org.json.JSONException;
进口org.json.JSONObject;进口java.security.MessageDigest中;
进口java.security.NoSuchAlgorithmException;
进口java.util.Arrays中;
进口java.util.Set中;公共类MainActivity扩展ActionBarActivity {
    按钮fb_login;    公共静态CallbackManager callbackmanager;
    //注册signup_task = NULL;    私人布尔fb_signincllicked = FALSE;    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);
        FacebookSdk.sdkInitialize(getApplicationContext());
        fb_login =(按钮)findViewById(R.id.fb_login);
        fb_login.setOnClickListener(新View.OnClickListener(){
            @覆盖
            公共无效的onClick(查看视图){
                onFblogin(真);
            }
        });
    }    @覆盖
    公共布尔onCreateOptionsMenu(菜单菜单){
        //充气菜单;如果是present这增加了项目操作栏。
        。getMenuInflater()膨胀(R.menu.menu_main,菜单);
        返回true;
    }    @覆盖
    公共布尔onOptionsItemSelected(菜单项项){
        //处理动作栏项目点击这里。操作栏会
        //自动处理上点击主页/向上按钮,只要
        //你在AndroidManifest.xml中指定一个父活动。
        INT ID = item.getItemId();        // noinspection SimplifiableIfStatement
        如果(ID == R.id.action_settings){
            返回true;
        }        返回super.onOptionsItemSelected(项目);
    }    公共无效onFblogin(布尔fb_btn){        fb_signincllicked = fb_btn;        callbackmanager = CallbackManager.Factory.create();        //设置权限
        LoginManager.getInstance()logInWithReadPermissions(这一点,Arrays.asList(public_profile,电子邮件))。        。LoginManager.getInstance()registerCallback(callbackmanager,新FacebookCallback< LoginResult>(){
            @覆盖
            公共无效的onSuccess(LoginResult loginResult){
                Log.v(TAG_JSONOBJECT2,+的JSONObject);                决胜盘<串GT; deniedPermissions = loginResult.getRecentlyDeniedPermissions();                GraphRequest.newMeRequest(loginResult.getAccessToken(),新GraphRequest.GraphJSONObjectCallback(){                    @覆盖
                    公共无效onCompleted(JSON的JSONObject,GraphResponse响应){                        如果(response.getError()!= NULL){                        }其他{
                            尝试{                                如果(deniedPermissions.contains(电子邮件)){
                                    LoginManager.getInstance()logInWithReadPermissions(MainActivity.this,Arrays.asList(电子邮件))。
                                }                                的JSONObject的JSONObject =新的JSONObject();                                jsonObject.put(FULL_NAME,json.getString(名字));
                                jsonObject.put(DEVICE_ID,Settings.Secure.getString(getContentResolver(),Settings.Secure.ANDROID_ID));
                                jsonObject.put(fb_id,json.getString(ID));
                                jsonObject.put(signuptype,1);                               / * signup_task =新注册(MainActivity.this);
                                如果(signup_task.getStatus()!= AsyncTask.Status.RUNNING){
                                    signup_task.execute(jsonObject.toString());
                                    signup_task.signupcompleted = MainActivity.this;
                                } * /                            }赶上(JSONException E){
                                e.printStackTrace();
                            }
                        }
                    }
                })executeAsync()。
            }            @覆盖
            公共无效onCancel(){
                Log.v(TAG_JSONOBJECTCANCEL,+的JSONObject);
                Log.d(取消,关于取消);
            }            @覆盖
            公共无效onerror的(FacebookException错误){
                Log.d(错误,error.toString());
            }
        });
    }
}

清单文件:

 <?XML版本=1.0编码=UTF-8&GT?;
<清单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.al.name>    <使用许可权的android:NAME =android.permission.INTERNET对/>
    <应用
        机器人:allowBackup =真
        机器人:图标=@的mipmap / ic_launcher
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@风格/ AppTheme>
        &所述;元数据
            机器人:名字=com.facebook.sdk.ApplicationId
            机器人:值=@字符串/ fb_appid/>
        &所述;元数据
            机器人:名字=com.google.android.gms.version
            机器人:值=@整数/ GOOGLE_PLAY_SERVICES_VERSION/>        <活动
            机器人:名字=com.al.MainActivity
            机器人:标签=@字符串/ APP_NAME>
            &所述;意图滤光器>
                <作用机器人:名字=android.intent.action.MAIN/>                <类机器人:名字=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:名字=com.facebook.FacebookActivity
            机器人:configChanges =键盘| keyboardHidden |屏幕布置|屏幕尺寸|定位
            机器人:标签=@字符串/ APP_NAME
            机器人:主题=@安卓风格/ Theme.Translucent.NoTitleBar/>
    < /用途>< /清单>

的gradle构建:

 应用插件:'com.android.application安卓{
    compileSdkVersion 21
    buildToolsVersion21.1.2    库{
        mavenCentral()
    }    defaultConfig {
        的applicationIDcom.al.name
        10的minSdkVersion
        targetSdkVersion 21
        版本code 1
        的versionName1.0
    }
    buildTypes {
        发布 {
            minifyEnabled假
            proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard-rules.pro
        }
    }
}依赖{
    编译文件树(导演:'库',包括:['的* .jar'])
    编译com.android.support:appcompat-v7:21.0.3
    编译com.google.android.gms:播放服务:7.3.0
    编译com.facebook.android:facebook-android-sdk:4.5.0
}

哈希键生成code:

  {尝试
        PackageInfo信息= getPackageManager()。getPackageInfo(
                包名,
                PackageManager.GET_SIGNATURES);
        对(签字签名:info.signatures){
            消息摘要MD = MessageDigest.getInstance(SHA);
            md.update(signature.toByteArray());
            Log.d(KeyHash:Base64.en codeToString(md.digest(),Base64.DEFAULT));
            }
    }赶上(ē的NameNotFoundException){    }赶上(抛出:NoSuchAlgorithmException E){    }


解决方案

我使用Facebook的辅助类登录。

FacebookHelper.java

 公共类FacebookHelper {私有静态最后弦乐TAG =FbHelper;
私人活动活动;
私人StatusCallback statusCallback =新SessionStatusCallback();公共FacebookHelper(){
}公共FacebookHelper(活动活动){    this.activity =活动;
}公共FacebookHelper(活动活动,捆绑savedInstanceState){    this.activity =活动;
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);    会话的会话= Session.getActiveSession();
    如果(会话== NULL || session.getState()。在isClosed()){
        如果(savedInstanceState!= NULL){
            会话= Session.restoreSession(活动,空,
                    statusCallback,savedInstanceState);
        }
        //如果(会话== NULL){
            会话=新的Session(活动);
        //}
        Session.setActiveSession(会话);
        如果(session.getState()。等于(SessionState.CREATED_TOKEN_LOADED)){
            session.openForRead(新Session.OpenRequest(活动)
                    .setCallback(statusCallback));
        }
    }
}公共Session.StatusCallback getStatusCallback(){
    返回statusCallback;
}公共无效loginToFacebook(){
    会话的会话= Session.getActiveSession();
    如果(session.isOpened()及!&放大器;!session.isClosed()){
        session.openForRead(新Session.OpenRequest(活动)
                .setPermissions(Arrays.asList(电子邮件/ *,user_birthday* /USER_LOCATION))
                .setCallback(statusCallback));
    }其他{
        Session.openActiveSession(活动,真实,statusCallback);
    }
}公共无效logoutFromFacebook(){    会话的会话= Session.getActiveSession();
    如果(会话!= NULL){
        session.closeAndClearTokenInformation();
    }
}公共布尔isLoggedInFromFb(){
    会话的会话= Session.getActiveSession();
    如果(会话= NULL&放大器;!&安培; session.isOpened()){
        返回true;
    }其他{
        返回false;
    }
}公共无效AP prequest(最终活动活动,最后弦乐ID){    Session.openActiveSession(活动,真,新StatusCallback(){        @覆盖
        公共无效呼叫(会话的会话,SessionState会状态,异常除外){            如果(session.isOpened()){                捆绑PARAMS =新包();
                params.putString(至,ID);
                params.putString(消息,EGrocery邀请);                WebDialog requestsDialog =(
                        新WebDialog.RequestsDialogBu​​ilder(活动,
                                Session.getActiveSession(),
                                PARAMS))
                                .setOnCompleteListener(新OnCompleteListener(){                                    @覆盖
                                    公共无效的onComplete(束值,
                                            FacebookException错误){
                                        // TODO自动生成方法存根
                                        如果(错误!= NULL){
                                            如果(错误的instanceof FacebookOperationCanceledException){
                                                 //Toast.makeText(activity,R.string.txt_invitation_cancel,
                                                 // Toast.LENGTH_SHORT).show();
                                            }其他{
                                                // Toast.makeText(活动,R.string.txt_invitation_cancel,
                                                // Toast.LENGTH_SHORT).show();
                                            }
                                        }其他{
                                            最后弦乐的requestId = values​​.getString(请求);
                                            如果(的requestId!= NULL){
                                                Toast.makeText(活动,邀请成功
                                                        Toast.LENGTH_SHORT).show();
                                            }其他{
                                                // Toast.makeText(活动,R.string.txt_invitation_cancel,
                                                // Toast.LENGTH_SHORT).show();
                                            }
                                        }
                                    }                                })
                                。建立();
                requestsDialog.show();                //低于3代码加入BY SHAHZEB KHOWAJA。
                / *如果(!requestsDialog.isShowing()){
                    requestsDialog.show();
                } * /
            }
        }    });
}公共无效postOnWall(最终活动活动,最终的字符串名称,最后弦乐标题,最后的字符串描述,
        最后弦乐环节,最后弦乐图片){    Session.openActiveSession(活动,真,新StatusCallback(){        @覆盖
        公共无效呼叫(会话的会话,SessionState会状态,异常除外){
            // TODO自动生成方法存根            如果(session.isOpened()){                捆绑PARAMS =新包();
                params.putString(名,名);
                params.putString(标题,字幕); //DrawWithFriends
                params.putString(说明,说明); //pa.getUserProfile()。getFullName()+共用了单词+ challengeQuestions.get(current_num_question).getQuestion()。屏幕取词()+与你在prepsta
                params.putString(链接的链接);
                params.putString(图片报图片);                WebDialog feedDialog =(
                    新WebDialog.FeedDialogBu​​ilder(活动,
                        Session.getActiveSession(),
                        PARAMS))
                    .setOnCompleteListener(新OnCompleteListener(){                        @覆盖
                        公共无效的onComplete(束值,
                            FacebookException错误){
                            如果(错误== NULL){
                                //当故事被张贴,呼应成功
                                //和帖子的ID。
                                最终字符串postid = values​​.getString(POST_ID);
                                如果(帖子ID!= NULL){
                                    /*Toast.makeText(ChallengeModeActivity.this,
                                        张贴的故事,ID:+帖子ID,
                                        Toast.LENGTH_SHORT).show(); * /                                    Toast.makeText(活动发布成功
                                            Toast.LENGTH_SHORT).show();
                                }其他{
                                    //用户点击了取消按钮
                                    //Toast.makeText(activity,R.string.txt_post_cancel,
                                    // Toast.LENGTH_SHORT).show();
                                }
                            }否则如果(错误的instanceof FacebookOperationCanceledException){
                                //用户点击X按钮
                                //Toast.makeText(activity,R.string.txt_post_cancel,
                                // Toast.LENGTH_SHORT).show();
                            }其他{
                                //通用,例如:网络错误
                                //Toast.makeText(activity,R.string.txt_post_cancel,
                                // Toast.LENGTH_SHORT).show();
                            }
                        }                    })
                    。建立();
                feedDialog.show();            }
        }
    });}公共无效getFacebookFriends(最终活动活动){    Session.openActiveSession(活动,真,新StatusCallback(){        @覆盖
        公共无效呼叫(会话的会话,SessionState会状态,异常除外){            如果(session.isOpened()){
                Utils.Log(Constants.LOG_I,TAG,Facebook的进程中打开);                请求friendRequest = Request.newMyFriendsRequest(会话,新Request.GraphUserListCallback(){                    @燮pressWarnings(未登记)
                    @覆盖
                    公共无效onCompleted(列表< GraphUser>的用户,响应响应){
                        // TODO自动生成方法存根
                        如果(response.getError()!= NULL){
                            Utils.Log(Constants.LOG_I,
                                    TAG,的String.format(错误决策的要求:%S,response.getError()));
                        }其他{                            Utils.Log(Constants.LOG_D,Constants.TAG,FB的朋友:+ response.toString());
                            ((IFbCallback<名单,LT; GraphUser>中响应>)活性).onFbRequestComplete(用户,响应);
                        }
                    }
                });                / *捆绑PARAMS =新包();
                params.putString(域,ID,名称,图片);
                friendRequest.setParameters(PARAMS); * /
                friendRequest.executeAsync();
            }        }    });
}私有类SessionStatusCallback实现Session.StatusCallback {
    @覆盖
    公共无效呼叫(会话的会话,SessionState会状态,异常除外){        如果(session.isOpened()){
            Utils.Log(Constants.LOG_I,TAG,Facebook的进程中打开);           Request.newMeRequest(会话,新Request.GraphUserCallback(){                @燮pressWarnings(未登记)
                @覆盖
                公共无效onCompleted(GraphUser用户,响应响应){
                    // TODO自动生成方法存根                    如果(response.getError()!= NULL){
                        Utils.Log(Constants.LOG_I,
                                TAG,的String.format(错误决策的要求:%S,response.getError()));
                    }其他{                        ((IFbCallback< GraphUser,响应>)活性).onFbRequestComplete(用户,响应);
                    }
                }
            })executeAsync()。
        }
    }
}

}

MainActivity.java

 公共类LoginActivity扩展活动实现OnClickListener,IFbCallback< GraphUser,响应> {
私人FacebookHelper fbHelper;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_login);    fbHelper =新FacebookHelper(这一点,savedInstanceState);    initControls();
}@覆盖
保护无效调用onStart(){
    // TODO自动生成方法存根
    super.onStart();
    。Session.getActiveSession()的addCallback(fbHelper.getStatusCallback());
    //googleHelper.getGoogleApiClient()连接()。
}@覆盖
保护无效的onStop(){
    // TODO自动生成方法存根
    super.onStop();
    。Session.getActiveSession()removeCallback(fbHelper.getStatusCallback());
}私人无效initControls(){    按钮fbSignInBtn =(按钮)findViewById(R.id.login_fb_sign_in_btn);    //监听器
    fbSignInBtn.setOnClickListener(本);
}@覆盖
保护无效的onActivityResult(INT申请code,INT结果code,意图数据){
    super.onActivityResult(要求code,结果code,数据);
    Session.getActiveSession()的onActivityResult(这一点,要求code,结果code,数据)。
}@覆盖
公共无效的onClick(视图v){    开关(v.getId()){        案例R.id.login_fb_sign_in_btn:            fbHelper.loginToFacebook();
            打破;
    }
}@覆盖
公共无效onFbRequestComplete(GraphUser graphUser,响应响应){    Utils.Log(Constants.LOG_E,Constants.TAG,response.toString());    //存储值本地
    字符串的uid = graphUser.getId();
    字符串FIRST_NAME = graphUser.getFirstName();
    字符串姓氏= graphUser.getLastName();
    字符串email =;    如果(response.toString()。包含(电子邮件)){
        。电子邮件= graphUser.getProperty(电子邮件)的toString();
    }    Log.e(MainActivity,ID:+ UID);
    Log.e(MainActivity,第一个名字:+ FIRST_NAME);
    Log.e(MainActivity,姓氏:+姓氏);
    Log.e(MainActivity,电子邮件:+电子邮件);
}

}

创建和实现接口

 公共接口IFbCallback< G,R> {公共无效onFbRequestComplete(G graphUser,R反应);
}

添加的build.gradle文件

 应用插件:'com.android.application安卓{
compileSdkVersion 22
buildToolsVersion23.0.0 RC3defaultConfig {
    的applicationIDcom.dvmfashion
    15的minSdkVersion
    targetSdkVersion 22
    版本code 1
    的versionName1.0
}
buildTypes {
    发布 {
        minifyEnabled假
        proguardFiles getDefaultProguardFile('proguard的-android.txt'),'proguard-rules.pro
    }
}
}依赖{
编译文件树(导演:'库',包括:['的* .jar'])
编译com.android.support:appcompat-v7:22.2.1
编译com.facebook.android:facebook-android-sdk:3.19.0

}

I am working on facebook integration in android. I googled and working on it. But i don't know why it is not working when i already have facebook app in my mobile.It is opening login page of facebook when i don't have facebook app in my mobile.

my code:

MainActivity:

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;

import android.util.Base64;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.provider.Settings;

import android.util.Log;

import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;
import com.facebook.FacebookException;
import com.facebook.FacebookSdk;
import com.facebook.GraphRequest;
import com.facebook.GraphResponse;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.Scopes;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.Scope;
import com.google.android.gms.plus.Plus;
import com.google.android.gms.plus.model.people.Person;

import org.json.JSONException;
import org.json.JSONObject;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Set;

public class MainActivity extends ActionBarActivity {
    Button fb_login;

    public static CallbackManager callbackmanager;
    //Signup signup_task = null;

    private boolean fb_signincllicked = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        FacebookSdk.sdkInitialize(getApplicationContext());


        fb_login = (Button) findViewById(R.id.fb_login);
        fb_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onFblogin(true);
            }
        });
    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    public void onFblogin(boolean fb_btn) {

        fb_signincllicked = fb_btn;

        callbackmanager = CallbackManager.Factory.create();

        // Set permissions
        LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email"));

        LoginManager.getInstance().registerCallback(callbackmanager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Log.v("TAG_JSONOBJECT2", "" + "jsonObject");

                final Set<String> deniedPermissions = loginResult.getRecentlyDeniedPermissions();

                GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() {

                    @Override
                    public void onCompleted(JSONObject json, GraphResponse response) {

                        if (response.getError() != null) {

                        } else {
                            try {

                                if (deniedPermissions.contains("email")) {
                                    LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("email"));
                                }

                                JSONObject jsonObject = new JSONObject();

                                jsonObject.put("full_name", json.getString("name"));
                                jsonObject.put("device_id", Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID));
                                jsonObject.put("fb_id", json.getString("id"));
                                jsonObject.put("signuptype", "1");

                               /* signup_task = new Signup(MainActivity.this);
                                if (signup_task.getStatus() != AsyncTask.Status.RUNNING) {
                                    signup_task.execute(jsonObject.toString());
                                    signup_task.signupcompleted = MainActivity.this;
                                }*/

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    }
                }).executeAsync();
            }

            @Override
            public void onCancel() {
                Log.v("TAG_JSONOBJECTCANCEL", "" + "jsonObject");
                Log.d("Cancel", "On cancel");
            }

            @Override
            public void onError(FacebookException error) {
                Log.d("Error", error.toString());
            }
        });
    }
}

manifest file:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.al.name">

    <uses-permission android:name="android.permission.INTERNET" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/fb_appid" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity
            android:name="com.al.MainActivity"
            android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    </application>

</manifest>

build gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    repositories {
        mavenCentral()
    }

    defaultConfig {
        applicationId "com.al.name"
        minSdkVersion 10
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.google.android.gms:play-services:7.3.0'
    compile 'com.facebook.android:facebook-android-sdk:4.5.0'
}

hash key generation code:

try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "package name",
                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) {

    }
解决方案

I am using Facebook helper class for login.

FacebookHelper.java

public class FacebookHelper {

private static final String TAG = "FbHelper";
private Activity activity;
private StatusCallback statusCallback = new SessionStatusCallback();

public FacebookHelper(){
}

public FacebookHelper(Activity activity){

    this.activity = activity;
}

public FacebookHelper(Activity activity, Bundle savedInstanceState){

    this.activity = activity;
    Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS);

    Session session = Session.getActiveSession();
    if (session == null || session.getState().isClosed()) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(activity, null,
                    statusCallback, savedInstanceState);
        }
        //if (session == null) {
            session = new Session(activity);
        //}
        Session.setActiveSession(session);
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) {
            session.openForRead(new Session.OpenRequest(activity)
                    .setCallback(statusCallback));
        }
    }
}

public Session.StatusCallback getStatusCallback() {
    return statusCallback;
}

public void loginToFacebook() {
    Session session = Session.getActiveSession();
    if (!session.isOpened() && !session.isClosed()) {
        session.openForRead(new Session.OpenRequest(activity)
                .setPermissions(Arrays.asList("email"/*,"user_birthday"*/,"user_location"))
                .setCallback(statusCallback));
    } else {
        Session.openActiveSession(activity, true, statusCallback);
    }
}

public void logoutFromFacebook() {

    Session session = Session.getActiveSession();
    if (session != null) {
        session.closeAndClearTokenInformation();
    }
}

public boolean isLoggedInFromFb() {
    Session session = Session.getActiveSession();
    if (session != null && session.isOpened()) {
        return true;
    } else {
        return false;
    }
}

public void appRequest(final Activity activity, final String id){

    Session.openActiveSession(activity, true, new StatusCallback() {

        @Override
        public void call(Session session, SessionState state, Exception exception) {

            if (session.isOpened()) {

                Bundle params = new Bundle();
                params.putString("to", id);
                params.putString("message", "EGrocery Invite");

                WebDialog requestsDialog = (
                        new WebDialog.RequestsDialogBuilder(activity,
                                Session.getActiveSession(),
                                params))
                                .setOnCompleteListener(new OnCompleteListener() {

                                    @Override
                                    public void onComplete(Bundle values,
                                            FacebookException error) {
                                        // TODO Auto-generated method stub
                                        if (error != null) {
                                            if (error instanceof FacebookOperationCanceledException) {
                                                 //Toast.makeText(activity, R.string.txt_invitation_cancel,
                                                 //      Toast.LENGTH_SHORT).show();
                                            } else {
                                                // Toast.makeText(activity, R.string.txt_invitation_cancel,
                                                // Toast.LENGTH_SHORT).show();
                                            }
                                        } else {
                                            final String requestId = values.getString("request");
                                            if (requestId != null) {
                                                Toast.makeText(activity, "Invited Successfully",
                                                        Toast.LENGTH_SHORT).show();
                                            } else {
                                                // Toast.makeText(activity, R.string.txt_invitation_cancel,
                                                // Toast.LENGTH_SHORT).show();
                                            }
                                        }
                                    }

                                })
                                .build();
                requestsDialog.show();

                // BELOW 3 LINES ADDED BY SHAHZEB KHOWAJA.
                /*if(!requestsDialog.isShowing()) {
                    requestsDialog.show();
                }*/
            }
        }

    });
}

public void postOnWall(final Activity activity, final String name, final String caption, final String description,
        final String link, final String picture) {

    Session.openActiveSession(activity, true, new StatusCallback() {

        @Override
        public void call(Session session, SessionState state, Exception exception) {
            // TODO Auto-generated method stub

            if (session.isOpened()) {

                Bundle params = new Bundle();
                params.putString("name", name);
                params.putString("caption", caption); //"DrawWithFriends"
                params.putString("description", description); //pa.getUserProfile().getFullName() +  " has shared the word " + challengeQuestions.get(current_num_question).getQuestion().getWord() + " with you in prepsta"
                params.putString("link", link);
                params.putString("picture", picture);

                WebDialog feedDialog = (
                    new WebDialog.FeedDialogBuilder(activity,
                        Session.getActiveSession(),
                        params))
                    .setOnCompleteListener(new OnCompleteListener() {

                        @Override
                        public void onComplete(Bundle values,
                            FacebookException error) {
                            if (error == null) {
                                // When the story is posted, echo the success
                                // and the post Id.
                                final String postId = values.getString("post_id");
                                if (postId != null) {
                                    /*Toast.makeText(ChallengeModeActivity.this,
                                        "Posted story, id: "+postId,
                                        Toast.LENGTH_SHORT).show();*/

                                    Toast.makeText(activity, "Posted successfully",
                                            Toast.LENGTH_SHORT).show();
                                } else {
                                    // User clicked the Cancel button
                                    //Toast.makeText(activity, R.string.txt_post_cancel,
                                    //   Toast.LENGTH_SHORT).show();
                                }
                            } else if (error instanceof FacebookOperationCanceledException) {
                                // User clicked the "x" button
                                //Toast.makeText(activity, R.string.txt_post_cancel,
                                //    Toast.LENGTH_SHORT).show();
                            } else {
                                // Generic, ex: network error
                                //Toast.makeText(activity, R.string.txt_post_cancel,
                                //    Toast.LENGTH_SHORT).show();
                            }
                        }

                    })
                    .build();
                feedDialog.show();

            }
        }
    });

}

public void getFacebookFriends(final Activity activity) {

    Session.openActiveSession(activity, true, new StatusCallback() {

        @Override
        public void call(Session session, SessionState state, Exception exception) {

            if (session.isOpened()) {
                Utils.Log(Constants.LOG_I, TAG, "Facebook Session Opened");

                Request friendRequest = Request.newMyFriendsRequest(session, new Request.GraphUserListCallback() {

                    @SuppressWarnings("unchecked")
                    @Override
                    public void onCompleted(List<GraphUser> users, Response response) {
                        // TODO Auto-generated method stub
                        if (response.getError() != null) {
                            Utils.Log(Constants.LOG_I,
                                    TAG, String.format("Error making request: %s", response.getError()));
                        } else {

                            Utils.Log(Constants.LOG_D, Constants.TAG, "fb friends: " + response.toString());
                            ((IFbCallback<List<GraphUser>, Response>)activity).onFbRequestComplete(users, response);
                        }
                    }
                });

                /*Bundle params = new Bundle();
                params.putString("fields", "id,name,picture");
                friendRequest.setParameters(params);*/
                friendRequest.executeAsync();
            }

        }

    });
}

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(Session session, SessionState state, Exception exception) {

        if(session.isOpened()){
            Utils.Log(Constants.LOG_I, TAG, "Facebook Session Opened");

           Request.newMeRequest(session, new Request.GraphUserCallback() {

                @SuppressWarnings("unchecked")
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    // TODO Auto-generated method stub

                    if (response.getError() != null) {
                        Utils.Log(Constants.LOG_I,
                                TAG, String.format("Error making request: %s", response.getError()));
                    } else {

                        ((IFbCallback<GraphUser, Response>)activity).onFbRequestComplete(user, response);
                    }
                }
            }).executeAsync();
        }
    }
}

}

MainActivity.java

public class LoginActivity extends Activity implements OnClickListener, IFbCallback<GraphUser, Response>{


private FacebookHelper fbHelper;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);

    fbHelper = new FacebookHelper(this, savedInstanceState);

    initControls();
}

@Override
protected void onStart() {
    // TODO Auto-generated method stub
    super.onStart();
    Session.getActiveSession().addCallback(fbHelper.getStatusCallback());
    //googleHelper.getGoogleApiClient().connect();
}

@Override
protected void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    Session.getActiveSession().removeCallback(fbHelper.getStatusCallback());
}

private void initControls() {

    Button fbSignInBtn = (Button) findViewById(R.id.login_fb_sign_in_btn);

    //listener
    fbSignInBtn.setOnClickListener(this);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

@Override
public void onClick(View v) {

    switch (v.getId()) {

        case R.id.login_fb_sign_in_btn:

            fbHelper.loginToFacebook();
            break;
    }
}

@Override
public void onFbRequestComplete(GraphUser graphUser, Response response) {

    Utils.Log(Constants.LOG_E, Constants.TAG, response.toString());

    // store values locally
    String uid = graphUser.getId();
    String first_name = graphUser.getFirstName();
    String last_name = graphUser.getLastName();
    String email = "";

    if (response.toString().contains("email")) {
        email = graphUser.getProperty("email").toString();
    }

    Log.e("MainActivity", "id: " + uid);
    Log.e("MainActivity", "first name: " + first_name);
    Log.e("MainActivity", "last name: " + last_name);
    Log.e("MainActivity", "email: " + email);
}

}

Create and Implement interface

public interface IFbCallback<G, R> {

public void onFbRequestComplete(G graphUser, R response);
}

Add build.gradle file

apply plugin: 'com.android.application'

android {
compileSdkVersion 22
buildToolsVersion "23.0.0 rc3"

defaultConfig {
    applicationId "com.dvmfashion"
    minSdkVersion 15
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}
}

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.facebook.android:facebook-android-sdk:3.19.0'

}

这篇关于与Facebook的最新SDK在Android Studio中整合Facebook的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 22:13
查看更多