安卓Facebook集成

7
我正在开发一款安卓应用程序,需要集成Facebook的“点赞”功能。我正在阅读这个链接:http://developers.facebook.com/docs/guides/mobile/#android。我有几个问题:
  1. 我使用keytool生成了密钥,但不知道如何在Mobile and Devices部分注册它。Mobile and Devices部分在哪里?
  2. 我该如何在我的应用程序中实现Facebook的“点赞”按钮功能?提供任何示例代码都将非常有帮助。
祝好, Sapan
www.darooadda.com
4个回答

3

我正在寻找制作一个本地应用程序,用户可以在其中喜欢某个项目并在Facebook上分享..你有任何示例代码吗? - Sapan

1
我并没有真正回答这个问题,但我建议在安卓中使用共享意图而不是需要验证的弹出API。如果一个安卓用户有Facebook账号,他很可能已经安装了Facebook应用程序。
更新: 请查看文档:http://developer.android.com/reference/android/content/Intent.html 大致应该是这样的:
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Extra message");

startActivity(Intent.createChooser(intent, "message"));

也许你可以直接针对 Facebook 应用程序进行操作。

我并不是很理解这个。你能否请解释一下? - Sapan
通过意图与 Facebook 分享目前存在漏洞,希望能尽快修复。https://dev59.com/R3A75IYBdhLWcg3wBkO1 - Kyle Clegg
使用意图进行共享是一种好的实践,但在分享文本和图片时,例如在Facebook上,这种方法不起作用。Facebook希望您使用其API。 - j.c

0
我使用了Facebook SDK 4.10.0来集成Android应用程序中的登录功能。我遵循的教程是: Facebook login integration android studio. 您将能够从Facebook获取名字,姓氏,电子邮件,性别,Facebook ID和出生日期。
上述教程还通过视频解释了如何在Facebook开发者控制台中创建应用程序。

Gradle.build

应用插件:'com.android.application'

安卓 { 编译SDK版本 23 构建工具版本 "23.0.3"

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

}

依赖项 { 编译文件树(dir: 'libs', include: ['*.jar']) 测试编译 'junit:junit:4.12' 编译 'com.android.support:appcompat-v7:23.4.0' 编译 'com.facebook.android:facebook-android-sdk:4.10.0' 编译 'com.github.androidquery:androidquery:0.26.9' }

activity_main.xml的源代码

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.demonuts.fblogin.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000"
        android:layout_marginLeft="10dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:id="@+id/text"/>

    <ImageView
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:id="@+id/ivpic"
        android:src="@mipmap/ic_launcher"/>

    <com.facebook.login.widget.LoginButton
        android:id="@+id/btnfb"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />   </LinearLayout>

MainActivity.java的代码

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ImageView;
import android.widget.TextView;
import com.androidquery.AQuery;
import com.facebook.AccessToken;
import com.facebook.AccessTokenTracker;
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.Profile;
import com.facebook.ProfileTracker;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;

public class MainActivity extends AppCompatActivity {



      private AQuery aQuery;
        private ImageView ivpic;
        private TextView tvdetails;
        private CallbackManager callbackManager;
        private AccessTokenTracker accessTokenTracker;
        private ProfileTracker profileTracker;
        private LoginButton loginButton;
        private FacebookCallback&lt;LoginResult&gt; callback = new FacebookCallback&lt;LoginResult&gt;() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                GraphRequest request = GraphRequest.newMeRequest(
                        loginResult.getAccessToken(),
                        new GraphRequest.GraphJSONObjectCallback() {
                            @Override
                            public void onCompleted(JSONObject object, GraphResponse response) {
                                Log.v("LoginActivity", response.toString());

                                // Application code
                                try {
                                    Log.d("tttttt",object.getString("id"));
                                    String birthday="";
                                    if(object.has("birthday")){
                                        birthday = object.getString("birthday"); // 01/31/1980 format
                                    }

                                    String fnm = object.getString("first_name");
                                    String lnm = object.getString("last_name");
                                    String mail = object.getString("email");
                                    String gender = object.getString("gender");
                                    String fid = object.getString("id");
                                    tvdetails.setText("Name: "+fnm+" "+lnm+" \n"+"Email: "+mail+" \n"+"Gender: "+gender+" \n"+"ID: "+fid+" \n"+"Birth Date: "+birthday);
                                    aQuery.id(ivpic).image("https://graph.facebook.com/" + fid + "/picture?type=large");
                                    //https://graph.facebook.com/143990709444026/picture?type=large
                                    Log.d("aswwww","https://graph.facebook.com/"+fid+"/picture?type=large");

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

                            }
                        });
                Bundle parameters = new Bundle();
                parameters.putString("fields", "id, first_name, last_name, email, gender, birthday, location");
                request.setParameters(parameters);
                request.executeAsync();

            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {

            }
        };


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            FacebookSdk.sdkInitialize(this);
            setContentView(R.layout.activity_main);

            tvdetails = (TextView) findViewById(R.id.text);
            ivpic = (ImageView) findViewById(R.id.ivpic);

            loginButton = (LoginButton) findViewById(R.id.btnfb);
            aQuery = new AQuery(this);

            callbackManager = CallbackManager.Factory.create();

            accessTokenTracker= new AccessTokenTracker() {
                @Override
                protected void onCurrentAccessTokenChanged(AccessToken oldToken, AccessToken newToken) {

                }
            };

            profileTracker = new ProfileTracker() {
                @Override
                protected void onCurrentProfileChanged(Profile oldProfile, Profile newProfile) {

                }
            };

            accessTokenTracker.startTracking();
            profileTracker.startTracking();
            loginButton.setReadPermissions(Arrays.asList("public_profile", "email", "user_birthday", "user_friends"));
            loginButton.registerCallback(callbackManager, callback);

        }

        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            callbackManager.onActivityResult(requestCode, resultCode, data);

        }

        @Override
        public void onStop() {
            super.onStop();
            accessTokenTracker.stopTracking();
            profileTracker.stopTracking();
        }

        @Override
        public void onResume() {
            super.onResume();
            Profile profile = Profile.getCurrentProfile();

        }

    }

0
package com.notifaction.fb_intgration;

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;

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.Profile;
import com.facebook.login.LoginManager;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;

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

import java.util.Arrays;

public class MainActivity extends AppCompatActivity {

    private CallbackManager callbackManager;

    TextView username,facebook;
    private String facebook_id,f_name, m_name, l_name, full_name, email_id;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();

        setContentView(R.layout.activity_main);

        facebook = (TextView)findViewById(R.id.login_facebook);
        username=(TextView)findViewById(R.id.username);

        callbackManager = CallbackManager.Factory.create();
        LoginManager.getInstance().registerCallback(callbackManager,
                new FacebookCallback<LoginResult>() {
                    @Override
                    public void onSuccess(LoginResult loginResult) {
                        Log.d("Success", "Login");
                        GraphRequest request = GraphRequest.newMeRequest(
                                loginResult.getAccessToken(),
                                new GraphRequest.GraphJSONObjectCallback() {
                                    @Override
                                    public void onCompleted(JSONObject object, GraphResponse response) {
                                        Log.v("LoginActivity", response.toString());
                                        // Application code
                                        try {
                                            String email = object.getString("email");
                                            String name = object.getString("name");
                                            Toast.makeText(MainActivity.this, ""+email+"  "+name, Toast.LENGTH_LONG).show();

                                        } catch (JSONException e) {
                                            e.printStackTrace();
                                        }
                                    }
                                });
                        Bundle parameters = new Bundle();
                        parameters.putString("fields", "id,name,email,gender,birthday");
                        request.setParameters(parameters);
                        request.executeAsync();
                    }

                    @Override
                    public void onCancel() {
                        Toast.makeText(MainActivity.this, "Login Cancel", Toast.LENGTH_LONG).show();
                    }

                    @Override
                    public void onError(FacebookException exception) {
                        Toast.makeText(MainActivity.this, "Login unsuccessful!", Toast.LENGTH_LONG).show();
                    }
                });
        facebook.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoginManager.getInstance().logInWithReadPermissions(MainActivity.this, Arrays.asList("public_profile", "email", "user_birthday", "user_friends"));
            }
        });
        username.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                LoginManager.getInstance().logOut();  // logout in facebook account
            }
        });
    }


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


////////////// xml ///////
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:facebook="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <TextView
        android:id="@+id/username"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="logout"
        android:layout_margin="10dp"
        android:textSize="20sp" />

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="40dp"
        android:layout_marginLeft="40dp"
        android:layout_marginTop="10dp">
        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="LOGIN WITH FACEBOOK"
            android:gravity="center"
            android:background="@drawable/facebook_buttion_background"
            android:textSize="14dp"
            android:paddingLeft="20dp"
            android:drawableLeft="@drawable/fb"
            android:textColor="@color/white"
            android:textStyle="bold"
            android:id="@+id/login_facebook" />
    </LinearLayout>

</LinearLayout>

/////////////// android manifest/////////////////////////////

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

    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />

        <activity android:name="com.facebook.FacebookActivity"
            android:configChanges=
                "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:label="@string/app_name" />
        <provider android:authorities="com.facebook.app.FacebookContentProvider1234"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true" />
    </application>

</manifest>

////////////////// gradel ///////////////////

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.notifaction.fb_intgration"
        minSdkVersion 16
        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'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:design:22.2.0'
    compile 'com.facebook.android:facebook-android-sdk:4.6.0'
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接