Facebook好友选择器SDK示例不工作的Andr​​oid [英] Facebook friend picker SDK sample not working Android

查看:343
本文介绍了Facebook好友选择器SDK示例不工作的Andr​​oid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮我用3.14 SDK来获得我的个人资料在Facebook上的朋友。有一个在code没有错误,但问题越来越空单,而在我的个人资料获取的朋友。我收到错误的logcat中说

  05-08 16:18:49.252:E / ActivityThread(25644):未能找到com.facebook.orca.provider.PlatformProvider&LT提供信息; BR>
05-08 16:42:20.453:I / QCNEA(28696):| NIMS |的getaddrinfo:主机名graph.facebook.com servname NULL数字4应用程序的名字< BR>
05-08 16:51:32.482:D /请求(31861):警告:无会话请求需要令牌,但缺少任一应用程序ID或客户端令牌LT; BR>
 

另外,我生产的完整的code下面
您参考

FriendPickerApplication.java *

 包com.facebook.samples.friendpicker;

进口android.app.Application;
进口com.facebook.model.GraphUser;

进口的java.util.List;

    //我们使用自定义应用程序的类来存储最小的状态数据(用户已被选中)。
    //一个现实世界的应用程序可能需要一个更强大的数据模型。
    公共类FriendPickerApplication扩展应用{
        私人列表< GraphUser> selectedUsers;

        公开名单< GraphUser> getSelectedUsers(){
            返回selectedUsers;
        }

        公共无效setSelectedUsers(名单< GraphUser> selectedUsers){
            this.selectedUsers = selectedUsers;
        }
    }< BR>
 

FriendPickerSampleActivity.java

 包com.facebook.samples.friendpicker;
进口android.app.AlertDialog;
进口android.content.DialogInterface;
进口android.content.Intent;
进口android.os.Bundle;
进口android.support.v4.app.FragmentActivity;
进口android.text.TextUtils;
进口android.view.View;
进口android.widget.Button;
进口android.widget.TextView;
进口com.facebook.AppEventsLogger;
进口com.facebook.Session.NewPermissionsRequest;
进口com.facebook.SessionState;
进口com.facebook.UiLifecycleHelper;
进口com.facebook.model.GraphUser;
进口com.facebook.Session;
进口的java.util.ArrayList;
进口java.util.Collection的;
进口的java.util.List;

公共类FriendPickerSampleActivity扩展FragmentActivity {
    私有静态最后的名单,其中,字符串> PERMISSIONS =新的ArrayList<字符串>(){
        {
            加(user_friends);
            加(public_profile);
        }
    };
    私有静态最终诠释PICK_FRIENDS_ACTIVITY = 1;
    私人按钮pickFriendsButton;
    私人TextView的resultsTextView;
    私人UiLifecycleHelper lifecycleHelper;
    布尔pickFriendsWhenSessionOpened;

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.main);

        resultsTextView =(TextView中)findViewById(R.id.resultsTextView);
        pickFriendsButton =(按钮)findViewById(R.id.pickFriendsButton);
        pickFriendsButton.setOnClickListener(新View.OnClickListener(){
            公共无效的onClick(视图查看){
                onClickPickFriends();
            }
        });

        lifecycleHelper =新UiLifecycleHelper(这一点,新Session.StatusCallback(){
            @覆盖
            公共无效呼叫(会话的会话,SessionState会状态,例外的例外){
                onSessionStateChanged(会话,状态除外);
            }
        });
        lifecycleHelper.onCreate(savedInstanceState);

        ensureOpenSession();
    }

    @覆盖
    保护无效的OnStart(){
        super.onStart();

        我们每次启动时//更新显示。
        displaySelectedFriends(RESULT_OK);
    }

    @覆盖
    保护无效onResume(){
        super.onResume();

        //调用activateApp方法记录一个应用程序事件的分析和广告报告中使用。这样做
        //将一个应用程序可以被发射到主活动的onResume方法。
        AppEventsLogger.activateApp(本);
    }

    公共无效onActivityResult(INT申请code,INT结果code,意图数据){
        开关(要求code){
            案例PICK_FRIENDS_ACTIVITY:
                displaySelectedFriends(结果code);
                打破;
            默认:
                Session.getActiveSession()onActivityResult(这一点,要求code,因此code,数据)。
                打破;
        }
    }

    私人布尔ensureOpenSession(){
        如果(Session.getActiveSession()== NULL ||
                !Session.getActiveSession()。isOpened()){
            Session.openActiveSession(
                    本,
                    真正,
                    权限
                    新Session.StatusCallback(){
                        @覆盖
                        公共无效呼叫(会话的会话,SessionState会状态,例外的例外){
                            onSessionStateChanged(会话,状态除外);
                        }
                    });
            返回false;
        }
        返回true;
    }

    私人布尔sessionHasNecessaryPerms(会话的会话){
        如果(会话= NULL和放大器;!&安培;!session.getPermissions()= NULL){
            对于(字符串requestedPerm:权限){
                如果(!session.getPermissions()。包含(requestedPerm)){
                    返回false;
                }
            }
            返回true;
        }
        返回false;
    }

    私人列表<字符串> getMissingPermissions(会话的会话){
        名单<字符串> missingPerms =新的ArrayList<字符串>(权限);
        如果(会话= NULL和放大器;!&安培;!session.getPermissions()= NULL){
            对于(字符串requestedPerm:权限){
                如果(session.getPermissions()。包括(requestedPerm)){
                    missingPerms.remove(requestedPerm);
                }
            }
        }
        返回missingPerms;
    }

    私人无效onSessionStateChanged(最后一届会议上,SessionState会状态,例外的例外){
        如果(state.isOpened()及和放大器;!sessionHasNecessaryPerms(会话)){
            AlertDialog.Builder建设者=新AlertDialog.Builder(本);
            builder.setMessage(R.string.need_perms_alert_text);
            builder.setPositiveButton(
                    R.string.need_perms_alert_button_ok,
                    新DialogInterface.OnClickListener(){
                        @覆盖
                        公共无效的onClick(DialogInterface对话,诠释它){
                            session.requestNewReadPermissions(
                                    新NewPermissionsRequest(
                                            FriendPickerSampleActivity.this,
                                            getMissingPermissions(会话)));
                        }
                    });
            builder.setNegativeButton(
                    R.string.need_perms_alert_button_quit,
                    新DialogInterface.OnClickListener(){
                        @覆盖
                        公共无效的onClick(DialogInterface对话,诠释它){
                            完();
                        }
                    });
            builder.show();
        }否则如果(pickFriendsWhenSessionOpened&安培;&安培; state.isOpened()){
            pickFriendsWhenSessionOpened = FALSE;

            startPickFriendsActivity();
        }
    }

    私人无效displaySelectedFriends(INT结果code){
        字符串结果=;
        FriendPickerApplication应用=(FriendPickerApplication)getApplication();

        收藏< GraphUser>选择= application.getSelectedUsers();
        如果(选择= NULL和放大器;!&安培; selection.size()0){
            ArrayList的<字符串>名称=新的ArrayList<字符串>();
            对于(GraphUser用户:选择){
                names.add(user.getName());
            }
            结果= TextUtils.join(,,名称);
        } 其他 {
            结果=&所述否朋友选择>中;
        }

        resultsTextView.setText(结果);
    }

    私人无效onClickPickFriends(){
        startPickFriendsActivity();
    }

    私人无效startPickFriendsActivity(){
        如果(ensureOpenSession()){
            意向意图=新的意图(这一点,PickFriendsActivity.class);
            //注意:以下行是可选的,因为多选行为是默认
            // FriendPickerFragment。正是在这里展示参数如何被传递到
            //如果单选的功能是需要的,或者不同的用户ID是朋友选择器
            //所需的(例如,看到朋友的朋友)。
            PickFriendsActivity.populateParameters(意向,空,真,真);
            startActivityForResult(意向,PICK_FRIENDS_ACTIVITY);
        } 其他 {
            pickFriendsWhenSessionOpened = TRUE;
        }
    }
}< BR>
 

PickFriendsActivity.java

 包com.facebook.samples.friendpicker;

进口android.content.Intent;
进口android.os.Bundle;
进口android.support.v4.app.FragmentActivity;
进口android.support.v4.app.FragmentManager;
进口android.widget.Toast;
进口com.facebook.FacebookException;
进口com.facebook.model.GraphUser;
进口com.facebook.widget.FriendPickerFragment;
进口com.facebook.widget.PickerFragment;

进口的java.util.List;

公共类PickFriendsActivity扩展FragmentActivity {
    FriendPickerFragment friendPickerFragment;

    公共静态无效populateParameters(意向意图,字符串userid,
            布尔多选,布尔showTitleBar){
        intent.putExtra(FriendPickerFragment.USER_ID_BUNDLE_KEY,用户id);
        intent.putExtra(FriendPickerFragment.MULTI_SELECT_BUNDLE_KEY,
                多选);
        intent.putExtra(FriendPickerFragment.SHOW_TITLE_BAR_BUNDLE_KEY,
                showTitleBar);
    }

    @覆盖
    公共无效的onCreate(包savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.pick_friends_activity);

        FragmentManager FM = getSupportFragmentManager();

        如果(savedInstanceState == NULL){
            //第一次通过,我们编程的方式创建我们的片段。
            最后包的args = getIntent()getExtras()。
            friendPickerFragment =新FriendPickerFragment(参数);
            fm.beginTransaction()
                    。新增(R.id.friend_picker_fragment,friendPickerFragment)
                    。承诺();
        } 其他 {
            //随后倍,我们的片段是由框架重新创建和
            //已经挽救和
            //恢复其状态,所以我们并不需要再次指定的args。 (在
            //事实上,这可能是
            //不正确如果上述DNA片段,因为它以编程改性
            //创建。)
            friendPickerFragment =(FriendPickerFragment)FM
                    .findFragmentById(R.id.friend_picker_fragment);
        }

        friendPickerFragment
                .setOnErrorListener(新PickerFragment.OnErrorListener(){
                    @覆盖
                    公共无效onerror的(PickerFragment<>的片段,
                            FacebookException错误){
                        PickFriendsActivity.this.onError(错误);
                    }
                });

        friendPickerFragment
                .setOnDoneButtonClickedListener(新PickerFragment.OnDoneButtonClickedListener(){
                    @覆盖
                    公共无效onDoneButtonClicked(PickerFragment<>片段){
                        //我们只是存储我们选择的应用
                        //其他活动来看待。
                        FriendPickerApplication应用=(FriendPickerApplication)getApplication();
                        application.setSelectedUsers(friendPickerFragment
                                .getSelection());

                        的setResult(RESULT_OK,NULL);
                        完();
                    }
                });
    }

    私人无效的onError(异常错误){
        字符串文本=的getString(R.string.exception,error.getMessage());
        吐司面包= Toast.makeText(本,文本,Toast.LENGTH_SHORT);
        toast.show();
    }

    @覆盖
    保护无效的OnStart(){
        super.onStart();
        尝试 {
            FriendPickerApplication应用=(FriendPickerApplication)getApplication();
            名单< GraphUser> selectedUsers = application.getSelectedUsers();
            如果(selectedUsers =空&安培;!&安培;!selectedUsers.isEmpty()){
                friendPickerFragment.setSelection(selectedUsers);
            }
            //加载数据,除非查询已经发生。
            friendPickerFragment.loadData(假);
        }赶上(例外前){
            onError的(前);
        }
    }
}< BR>
 

AndroidManifest.xml中

 < XML版本=1.0编码=UTF-8&GT?;
<舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    包=com.facebook.samples.friendpicker
    安卓版code =1
    机器人:VERSIONNAME =1.0>

    <使用-SDK安卓的minSdkVersion =8/>

    <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>
    <使用-权限的Andr​​oid:名称=android.permission.WRITE_EXTERNAL_STORAG​​E/>

    <应用
        机器人:FriendPickerApplicationNAME =
        机器人:图标=@可绘制/图标
        机器人:标签=@字符串/ APP_NAME
        机器人:主题=@安卓风格/ Theme.NoTitleBar>
        <活动
            机器人:名称=FriendPickerSampleActivity
            机器人:标签=@字符串/ APP_NAME
            机器人:windowSoftInputMode =adjustResize>
            <意向滤光器>
                <作用机器人:名称=android.intent.action.MAIN/>

                <类机器人:名称=android.intent.category.LAUNCHER/>
            &所述; /意图滤光器>
        < /活性GT;
        <活动
            机器人:名称=PickFriendsActivity
            机器人:标签=选择朋友>
        < /活性GT;
        <活动
            机器人:名称=com.facebook.LoginActivity
            机器人:标签=@字符串/ APP_NAME
            机器人:主题=@安卓风格/ Theme.Translucent.NoTitleBar/>

        &所述;元数据
            机器人:名称=com.facebook.sdk.ApplicationId
            机器人:值=@字符串/ APP_ID/>

        <供应商
            机器人:名称=com.facebook.NativeAppCallContentProvider
            机器人:当局=com.facebook.app.NativeAppCallContentProvider1441068969495032
            机器人:出口=真/>
    < /用途>

< /舱单>
 

解决方案

一个长期的斗争,我发现我自己解决了以上问题之后。 Facebook的发布了他们新的SDK近日,以提高保障水平。有几个要求使用Facebook SDK在您的应用程序。

  1. 应用程序应送交提交,并需由的Facebook 要使用里面Facebook,以使自己的应用程序,以显示的朋友的细节,访问位置和其他批准特殊权限的审批手续类似于那些为应用程序商店在谷歌播放。

  2. 应用程序必须列在谷歌播放,或者你可以将其整合为一个测试用户(即像在谷歌测试版播放)。

  3. 应用程序应该有一个正确的包名,开展活动,域名,网站的网址和电子邮件。

  4. 应用程序ID 注册必须用应用名称相匹配哈希键必须为用户开发上生成< STRONG>不同的机器

  5. 基本应用信息,包括截图 说明应用标志需要添加

  6. 在成功获得批准后,活动符号将被靠近你的应用程序名称显示出来。

我希望这将是对别人有用

在Facebook网站

更多信息。

Please help me to get the facebook friends from my profile using 3.14 SDK. There is no error in the code but the problem is getting empty list while fetching friends in my profile. I am getting the error in logcat saying
.

05-08 16:18:49.252: E/ActivityThread(25644): Failed to find provider info for com.facebook.orca.provider.PlatformProvider<br>
05-08 16:42:20.453: I/QCNEA(28696): |NIMS| getaddrinfo: hostname graph.facebook.com servname NULL numeric 4 appname <br>
05-08 16:51:32.482: D/Request(31861): Warning: Sessionless Request needs token but missing either application ID or client token<br>

Also i am producing the complete code for your reference below

FriendPickerApplication.java*

package com.facebook.samples.friendpicker;

import android.app.Application;
import com.facebook.model.GraphUser;

import java.util.List;

    // We use a custom Application class to store our minimal state data (which users have been selected).
    // A real-world application will likely require a more robust data model.
    public class FriendPickerApplication extends Application {
        private List<GraphUser> selectedUsers;

        public List<GraphUser> getSelectedUsers() {
            return selectedUsers;
        }

        public void setSelectedUsers(List<GraphUser> selectedUsers) {
            this.selectedUsers = selectedUsers;
        }
    }<br>

FriendPickerSampleActivity.java

package com.facebook.samples.friendpicker;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.facebook.AppEventsLogger;
import com.facebook.Session.NewPermissionsRequest;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.Session;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

public class FriendPickerSampleActivity extends FragmentActivity {
    private static final List<String> PERMISSIONS = new ArrayList<String>() {
        {
            add("user_friends");
            add("public_profile");
        }
    };
    private static final int PICK_FRIENDS_ACTIVITY = 1;
    private Button pickFriendsButton;
    private TextView resultsTextView;
    private UiLifecycleHelper lifecycleHelper;
    boolean pickFriendsWhenSessionOpened;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        resultsTextView = (TextView) findViewById(R.id.resultsTextView);
        pickFriendsButton = (Button) findViewById(R.id.pickFriendsButton);
        pickFriendsButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                onClickPickFriends();
            }
        });

        lifecycleHelper = new UiLifecycleHelper(this, new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                onSessionStateChanged(session, state, exception);
            }
        });
        lifecycleHelper.onCreate(savedInstanceState);

        ensureOpenSession();
    }

    @Override
    protected void onStart() {
        super.onStart();

        // Update the display every time we are started.
        displaySelectedFriends(RESULT_OK);
    }

    @Override
    protected void onResume() {
        super.onResume();

        // Call the 'activateApp' method to log an app event for use in analytics and advertising reporting.  Do so in
        // the onResume methods of the primary Activities that an app may be launched into.
        AppEventsLogger.activateApp(this);
    }

    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
            case PICK_FRIENDS_ACTIVITY:
                displaySelectedFriends(resultCode);
                break;
            default:
                Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
                break;
        }
    }

    private boolean ensureOpenSession() {
        if (Session.getActiveSession() == null ||
                !Session.getActiveSession().isOpened()) {
            Session.openActiveSession(
                    this, 
                    true, 
                    PERMISSIONS,
                    new Session.StatusCallback() {
                        @Override
                        public void call(Session session, SessionState state, Exception exception) {
                            onSessionStateChanged(session, state, exception);
                        }
                    });
            return false;
        }
        return true;
    }

    private boolean sessionHasNecessaryPerms(Session session) {
        if (session != null && session.getPermissions() != null) {
            for (String requestedPerm : PERMISSIONS) {
                if (!session.getPermissions().contains(requestedPerm)) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    private List<String> getMissingPermissions(Session session) {
        List<String> missingPerms = new ArrayList<String>(PERMISSIONS);
        if (session != null && session.getPermissions() != null) {
            for (String requestedPerm : PERMISSIONS) {
                if (session.getPermissions().contains(requestedPerm)) {
                    missingPerms.remove(requestedPerm);
                }
            }
        }
        return missingPerms;
    }

    private void onSessionStateChanged(final Session session, SessionState state, Exception exception) {
        if (state.isOpened() && !sessionHasNecessaryPerms(session)) {
            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setMessage(R.string.need_perms_alert_text);
            builder.setPositiveButton(
                    R.string.need_perms_alert_button_ok, 
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            session.requestNewReadPermissions(
                                    new NewPermissionsRequest(
                                            FriendPickerSampleActivity.this, 
                                            getMissingPermissions(session)));
                        }
                    });
            builder.setNegativeButton(
                    R.string.need_perms_alert_button_quit,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    });
            builder.show();
        } else if (pickFriendsWhenSessionOpened && state.isOpened()) {
            pickFriendsWhenSessionOpened = false;

            startPickFriendsActivity();
        }
    }

    private void displaySelectedFriends(int resultCode) {
        String results = "";
        FriendPickerApplication application = (FriendPickerApplication) getApplication();

        Collection<GraphUser> selection = application.getSelectedUsers();
        if (selection != null && selection.size() > 0) {
            ArrayList<String> names = new ArrayList<String>();
            for (GraphUser user : selection) {
                names.add(user.getName());
            }
            results = TextUtils.join(", ", names);
        } else {
            results = "<No friends selected>";
        }

        resultsTextView.setText(results);
    }

    private void onClickPickFriends() {
        startPickFriendsActivity();
    }

    private void startPickFriendsActivity() {
        if (ensureOpenSession()) {
            Intent intent = new Intent(this, PickFriendsActivity.class);
            // Note: The following line is optional, as multi-select behavior is the default for
            // FriendPickerFragment. It is here to demonstrate how parameters could be passed to the
            // friend picker if single-select functionality was desired, or if a different user ID was
            // desired (for instance, to see friends of a friend).
            PickFriendsActivity.populateParameters(intent, null, true, true);
            startActivityForResult(intent, PICK_FRIENDS_ACTIVITY);
        } else {
            pickFriendsWhenSessionOpened = true;
        }
    }
} <br>

PickFriendsActivity.java

package com.facebook.samples.friendpicker;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.widget.Toast;
import com.facebook.FacebookException;
import com.facebook.model.GraphUser;
import com.facebook.widget.FriendPickerFragment;
import com.facebook.widget.PickerFragment;

import java.util.List;

public class PickFriendsActivity extends FragmentActivity {
    FriendPickerFragment friendPickerFragment;

    public static void populateParameters(Intent intent, String userId,
            boolean multiSelect, boolean showTitleBar) {
        intent.putExtra(FriendPickerFragment.USER_ID_BUNDLE_KEY, userId);
        intent.putExtra(FriendPickerFragment.MULTI_SELECT_BUNDLE_KEY,
                multiSelect);
        intent.putExtra(FriendPickerFragment.SHOW_TITLE_BAR_BUNDLE_KEY,
                showTitleBar);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.pick_friends_activity);

        FragmentManager fm = getSupportFragmentManager();

        if (savedInstanceState == null) {
            // First time through, we create our fragment programmatically.
            final Bundle args = getIntent().getExtras();
            friendPickerFragment = new FriendPickerFragment(args);
            fm.beginTransaction()
                    .add(R.id.friend_picker_fragment, friendPickerFragment)
                    .commit();
        } else {
            // Subsequent times, our fragment is recreated by the framework and
            // already has saved and
            // restored its state, so we don't need to specify args again. (In
            // fact, this might be
            // incorrect if the fragment was modified programmatically since it
            // was created.)
            friendPickerFragment = (FriendPickerFragment) fm
                    .findFragmentById(R.id.friend_picker_fragment);
        }

        friendPickerFragment
                .setOnErrorListener(new PickerFragment.OnErrorListener() {
                    @Override
                    public void onError(PickerFragment<?> fragment,
                            FacebookException error) {
                        PickFriendsActivity.this.onError(error);
                    }
                });

        friendPickerFragment
                .setOnDoneButtonClickedListener(new PickerFragment.OnDoneButtonClickedListener() {
                    @Override
                    public void onDoneButtonClicked(PickerFragment<?> fragment) {
                        // We just store our selection in the Application for
                        // other activities to look at.
                        FriendPickerApplication application = (FriendPickerApplication) getApplication();
                        application.setSelectedUsers(friendPickerFragment
                                .getSelection());

                        setResult(RESULT_OK, null);
                        finish();
                    }
                });
    }

    private void onError(Exception error) {
        String text = getString(R.string.exception, error.getMessage());
        Toast toast = Toast.makeText(this, text, Toast.LENGTH_SHORT);
        toast.show();
    }

    @Override
    protected void onStart() {
        super.onStart();
        try {
            FriendPickerApplication application = (FriendPickerApplication) getApplication();
            List<GraphUser> selectedUsers = application.getSelectedUsers();
            if (selectedUsers != null && !selectedUsers.isEmpty()) {
                friendPickerFragment.setSelection(selectedUsers);
            }
            // Load data, unless a query has already taken place.
            friendPickerFragment.loadData(false);
        } catch (Exception ex) {
            onError(ex);
        }
    }
}<br>

Androidmanifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.facebook.samples.friendpicker"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <application
        android:name=".FriendPickerApplication"
        android:icon="@drawable/icon"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar" >
        <activity
            android:name="FriendPickerSampleActivity"
            android:label="@string/app_name"
            android:windowSoftInputMode="adjustResize" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="PickFriendsActivity"
            android:label="Pick Friends" >
        </activity>
        <activity
            android:name="com.facebook.LoginActivity"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />

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

        <provider
            android:name="com.facebook.NativeAppCallContentProvider"
            android:authorities="com.facebook.app.NativeAppCallContentProvider1441068969495032"
            android:exported="true" />
    </application>

</manifest>

解决方案

After a long struggle I found my own solution to the above question. Facebook have released their new SDK recently to enhance the level of security. There are a few requirements to use facebook SDK in your app.

  1. The app should be sent for submission and needs to be approved by facebook to be use inside facebook, to enable your own app to show friends details, access locations and other special permissions The approval formalities are similar to the ones for app store in Google Play.

  2. The application must be listed in Google Play, or you may be able to integrate it as a test user (i.e like beta testing in Google Play).

  3. The application should have a proper package name, launching activity, domain name, website url and email.

  4. The app id registered must match with an app name and hash key that must be generated for a user developing on different machines

  5. The basic application information, including screenshots, description, and app logo needs to be added

  6. Once after the successful approval, an "active" symbol will be displayed near your app name.

I hope this will be useful for others!!!

More information on Facebook site.

这篇关于Facebook好友选择器SDK示例不工作的Andr​​oid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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