2013-10-21 66 views
1

我遇到了不同的错误。我试图做Facebook Share对话框,但是我在logcat中遇到了这个错误。Facebook分享对话框中的错误

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 

    } 
}; 

} 

这里是我的logcat:

http://shrib.com/nointentstuff

+0

你有没有在设备上测试您的应用程序 – Raghunandan

+0

最近,我意识到这是我没有安装在使用Facebook应用我模拟器。将解决的事情? – Jeongbebs

+0

是的,这就是你的logcat所说的,文档也是这样说的。检查我的文章 – Raghunandan

回答

4

com.facebook.FacebookException:无法创建意图;这可能意味着 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安装%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 
+0

等一下,我会尝试在设备上。 – Jeongbebs

+0

它运行,但发生了一些不寻常的事情。 Facebook出现了一瞬间,然后消失了,完全消失了。看起来Facebook的活动甚至没有开始。有任何想法吗? – Jeongbebs

+0

@MiguelRivera问题可能是你身份验证,你可能没有登录到Facebook。按照文档。它有一个共享登录的例子,并有更多的https://developers.facebook.com/docs/android/scrumptious/ – Raghunandan

17

对于那些谁真正想建立自己的应用谁可能不会有Facebook用户应用程序安装,确保包含在你的ShareDialog建设者(more info here)这个检查:

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()); 

} 
+0

那么如何在未安装fb应用的设备上共享帖子? –

12

如果用户没有安装该应用程序(从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); 
} 
1

// 清单文件

<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); 
    }