【发布时间】:2015-06-12 16:18:02
【问题描述】:
我正在开发一个具有(至少)两种具有不同包名称的应用程序 - 因此就 android 系统而言实际上是两个不同的应用程序。该应用程序使用 Facebook 共享,因此我在清单中声明了提供程序:
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
这是根据 Facebook 的说明完成的:https://developers.facebook.com/docs/sharing/android
这适用于一个应用程序,但尝试在同一设备上安装第二个应用程序失败并出现错误 INSTALL_FAILED_CONFLICTING_PROVIDER。这是清单中定义的唯一提供程序,所以我很确定这是问题所在。如果我将提供程序字符串更改为不同的内容,它会在尝试打开 Facebook 共享对话框时崩溃。
我看到有人声称可以在多个 Android 应用程序中使用同一个 Facebook 应用程序,但在 Facebook 的文档中找不到任何关于它的信息。有没有人这样做过,您是如何解决提供者权限问题的?谢谢。
【问题讨论】:
-
如果每种风味都有不同的 applicationId,那么您可以这样做:stackoverflow.com/a/30791242/1426565 并将正确的 applicationId 注入清单中提供者的声明中,因为 $(applicationId) 实际上返回包名称而不是你在 gradle 中定义的 applicationId
-
最后回到这个问题 - 我要尝试一下,但似乎这会遇到同样的问题,因为应用程序以相同的权限字符串结束,只是来自构建过程而不是而不是直接在清单中。
-
您可能应该考虑在构建时根据 applicationId 注入不同的值。这实际上是我上周的一个答案,应该可以帮助你做到这一点:stackoverflow.com/a/30791242/1426565
-
如果我尝试使用不同的值,Facebook 分享功能会导致应用程序崩溃。问题是 Facebook 显然需要为每个 Facebook 应用程序提供相同的提供商权限,所以我看不出如何在多个 Android 应用程序中使用一个 Facebook 应用程序。如果有人可以最终告诉我这是不可能的(最好有支持文件),那将是一个可以接受的答案。
-
如果您阅读this,您会发现除非您附加图片,否则您不需要 FacebookContentProvider。
标签: android facebook android-contentprovider