繁体   English   中英

Facebook分享对话框中的错误

[英]Error in Facebook Share Dialog

我遇到了一个与众不同的错误。 我尝试执行“ Facebook分享”对话框,但是在logcat中遇到此错误。

 10-17 15:44:39.026: E/AndroidRuntime(2534): com.facebook.FacebookException: Unable to create Intent; this likely means the Facebook app is not installed.

我不知道这是什么意思。 我试图搜索它,但是没有类似的实例。 这是我的代码。

TabFour.java

public class TabFour extends Fragment {
private UiLifecycleHelper uiHelper;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_tab_four, container, false);

    return rootView;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    uiHelper = new UiLifecycleHelper(getActivity(), callback);
    uiHelper.onCreate(savedInstanceState);

    OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
    action.setProperty("book", "https://example.com/book/Snow-Crash.html");

    @SuppressWarnings("deprecation")
    FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(getActivity(), action, "books.reads", "book")
            .build();
    uiHelper.trackPendingDialogCall(shareDialog.present());
}


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

    uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() {
        @Override
        public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) {
            Log.e("Activity", String.format("Error: %s", error.toString()));
        }

        @Override
        public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) {
            Log.i("Activity", "Success!");
        }
    });
}



@Override
public void onResume() {
    super.onResume();
    uiHelper.onResume();
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    uiHelper.onSaveInstanceState(outState);
}

@Override
public void onPause() {
    super.onPause();
    uiHelper.onPause();
}

@Override
public void onDestroy() {
    super.onDestroy();
    uiHelper.onDestroy();
}
private Session.StatusCallback callback = new Session.StatusCallback() {


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

    }
};

}

这是我的日志。

http://shrib.com/nointentstuff

对于那些实际上想要为可能未安装Facebook应用程序的用户构建其应用程序的用户,请确保在您的ShareDialog构建器中包括此检查( 此处有更多信息 ):

if (FacebookDialog.canPresentShareDialog(getApplicationContext(), 
                                         FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) {
    FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this)
            .setLink("https://developers.facebook.com/android")
            .build();
    uiHelper.trackPendingDialogCall(shareDialog.present());

}

如果用户未安装该应用程序(来自FB的荒谬依赖...),则可以回退到从浏览器共享:

String linkString = "https://developers.facebook.com/android";
if (FacebookDialog.canPresentShareDialog(getApplicationContext(), FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) {
    FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(this).setLink(linkString).build();
    uiHelper.trackPendingDialogCall(shareDialog.present());
} else {
    String sharerUrl = "https://www.facebook.com/sharer/sharer.php?u=" + linkString;
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(sharerUrl));
    this.startActivity(intent);
}

com.facebook.FacebookException:无法创建Intent; 这可能意味着未安装Facebook应用

从步骤2报价@ https://developers.facebook.com/docs/android/getting-started/facebook-sdk-for-android/

Facebook SDK使用Facebook的本机应用程序来提供对身份验证的支持。 在真实设备上,您可以通过简单地从Google Play免费安装此应用来进行测试。 但是,无法在模拟器上访问Google Play。 如果要在此处测试流程,我们会在SDK中提供一个副本,您可以安装该副本。

Facebook应用程序的可安装APK在SDK的bin文件夹中,名为FBAndroid-3.5.apk或类似名称。 要将其安装到Android模拟器上,首先需要启动模拟器。

其次,在主Android SDK的platform-tools目录中找到adb工具。 在OS X上,当您解压缩Android SDK时,将选择此位置。 在Windows上,SDK已安装到您的主目录中,位于AppData \\ Local \\ Android \\ android-sdk下

假设已将Facebook SDK放置在主目录中,则使用adb将APK安装到OS X中正在运行的模拟器中,如下所示:

./adb install ~/facebook-android-sdk-3.5/bin/FBAndroid-3.5.apk

在Windows上,如下所示:

adb install%HOMEPATH%\\ facebook-android-sdk-3.5 \\ bin \\ FBAndroid-3.5.apk完成后,检查模拟器的应用程序屏幕以检查该应用程序是否已正确安装。 如果您需要从以前的版本强制升级此应用,请添加-r标志,例如在OS X上:

./adb install -r ~/facebook-android-sdk-3.5/bin/FBAndroid-3.5.apk

// 清单文件

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

build.gradle编译'com.facebook.android:facebook-android-sdk:4.8.0'

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

    <provider
        android:name="com.facebook.FacebookContentProvider"
        android:authorities="com.facebook.app.FacebookContentProvider1854328631556764"
        android:exported="true" />


 private CallbackManager callbackManager;  // Global variable Declare 
private ShareDialog     mFacebookShareDialog;   // Global variable Declare 

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

  callbackManager = CallbackManager.Factory.create();
        fbloginButton = (LinearLayout) findViewById(R.id.facebook_button);

        mFacebookShareDialog = new ShareDialog(this);

}

当成功完全登录到Facebook时,然后调用shareOnFaceboo kMethod即可正常工作

   private void shareOnFacebook(){

        ShareLinkContent shareContent = new ShareLinkContent.Builder()
                .setContentTitle("The Simpson!")
                .setContentUrl(Uri.parse("http://www.codecube.in/airbucks-project"))
                .build();

        mFacebookShareDialog.show(shareContent, ShareDialog.Mode.FEED);

        mFacebookShareDialog.registerCallback( this.callbackManager, new FacebookCallback<Sharer.Result>() {
            @Override
            public void onSuccess(Sharer.Result result) {
                Log.v("MyApp", "Share success!"); //Showed if I press the share or the cancel button
                String postID = result.getPostId();
                Log.v("MyApp", "Share success!" +result);
                Log.v("MyApp", "Share success!" +postID);
                Log.v("MyApp", "Share success!" +result.getPostId());
                Log.v("MyApp", "Share success!" +result.toString());
                Log.v("MyApp", "Share success!" +result);

                CommonMethod.showAlert("Sucesssfully post in Fb  Post id -> " +postID +" Result " +result  ,MainActivity.this);

            }
            @Override
            public void onCancel() {
                Log.v("MyApp", "Share canceled"); //Only showed when I press the close button
                CommonMethod.showAlert("Post onCancel " ,MainActivity.this);
            }

            @Override
            public void onError(FacebookException e) {
                Log.v("MyApp","Share error: " + e.toString());
                CommonMethod.showAlert("Post onError "+e ,MainActivity.this);
            }

        });

    }


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM