【问题标题】:Android - Facebook SDK 4.0.0 - ShareDialog doesn't show when image sharingAndroid - Facebook SDK 4.0.0 - ShareDialog 在图像共享时不显示
【发布时间】:2018-03-29 20:42:31
【问题描述】:

我在使用 facebook SDK 共享图像时遇到了问题。 我创建了一个调用本机 facebook 应用程序共享对话框的按钮。 但不幸的是,它没有出现。以及 DDMS 上的错误信息:

“未能找到 com.facebook.app.FacebookContentProvider798741073537656 的提供商信息”

请帮忙给点提示。谢谢!

protected void onCreate(Bundle savedInstanceState) {
    FacebookSdk.sdkInitialize(getApplicationContext());
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn_share = (Button) findViewById(R.id.btn_share);
    shareDialog = new ShareDialog(MainActivity.this);

    btn_share.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Bitmap image = BitmapFactory.decodeFile(path);
            SharePhoto photo = new SharePhoto.Builder().setBitmap(image).build();
            SharePhotoContent content  = new SharePhotoContent.Builder().addPhoto(photo).build();
            shareDialog.show(content);
        }
    });
}

【问题讨论】:

  • 您是否按照所有说明进行操作?生成 KeyHash,在清单中添加 FacebookActivity 和提供程序。您是否在 Status & Review 上提交了您的应用?

标签: android facebook


【解决方案1】:

我遇到了类似的问题,我缺少的是 AndroidManifest.xml 中的提供程序标记。来自 Facebook 文档 (https://developers.facebook.com/docs/sharing/android#photos):

您还需要在 AndroidManifest.xml 中设置 ContentProvider,其中 {APP_ID} 是您的应用 ID:

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

【讨论】:

    【解决方案2】:

    我花了几个小时试图找出问题所在。在我的例子中,提供者标签在 AndroidManifest.xml 中的应用标签之外。确保您将提供程序包含在应用程序中而不是外部希望这会有所帮助:)

    <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">
            <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"
            tools:replace="android:theme"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:label="@string/app_name" />
    
        <provider android:authorities="com.facebook.app.FacebookContentProvider1533172037423618"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true" />
    
    </application>
    

    【讨论】:

      【解决方案3】:

      首先确保你在 AndroidManifest.xml 中提到了内容提供者

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

      1234 是你的应用 ID。

      第二次使用真机测试你的应用。并确保你的设备中已经安装了官方的Facebook应用。

      【讨论】:

        【解决方案4】:

        对我来说,问题是 &lt;provider&gt; 必须在 AndroidManifest.xml sdk 的 &lt;application&gt; 标记内

        【讨论】:

          【解决方案5】:

          我已经在 Glide v4.+ 上测试过了

          Glide.with(this)
                      .asBitmap()
                      .load(YOUR_IMAGE_URL).into(new SimpleTarget<Bitmap>() {
                  @Override
                  public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
          
                      SharePhoto sharePhoto1 = new SharePhoto.Builder()
                              .setBitmap(resource)
                              .build();
          
                      ShareContent shareContent = new ShareMediaContent.Builder()
                              .addMedium(sharePhoto1)
                              .build();
          
                      new ShareDialog(getActivity()).show(shareContent, ShareDialog.Mode.AUTOMATIC);
                  }
              });
          

          除非您在 Manifest.xml 中添加此代码,否则上述代码将不起作用:

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

          文档:https://developers.facebook.com/docs/sharing/android

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-05-31
            • 1970-01-01
            • 2015-06-04
            相关资源
            最近更新 更多