Управление сайтом Facebook Facebook
Я разрабатываю приложение с (по крайней мере) двумя вариантами, имеющими разные имена пакетов, поэтому на самом деле два разных приложения для системы 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.
Я видел утверждения о том, что можно использовать одно приложение Facebook в нескольких приложениях для Android, но не может найти что-либо в документации по этому поводу в Facebook. Кто-нибудь это сделал, и как вы столкнулись с проблемой полномочий поставщика? Спасибо.
Ответы
Ответ 1
Я смог решить это, имея отдельные манифесты для своих отладочных и релизов и в своем манифестах отладки, я добавил фрагмент для провайдера, но установил для экспортированного значения значение false. В моем манифесте аромата релиза у меня есть исходный фрагмент поставщика с экспортированным набором в true.
После этого я больше не получил ошибку INSTALL_FAILED_CONFLICTING_PROVIDER.
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
android:name="com.facebook.FacebookContentProvider"
android:exported="false"/>
Ответ 2
Одно из возможных решений, которое я нашел, - это описанное здесь
http://gradlewhy.ghost.io/overcoming-install-failed-conflicting-provider/
Я уже использую это для (варианты debug/release) android.support.v4.content.FileProvider и, насколько я проверял, также работает для com.facebook.app.FacebookContentProvider.
Просто добавьте в apps build.gradle
debug {
applicationIdSuffix '.debug'
versionNameSuffix '-DEBUG'
resValue "string", "fb_provider_id", "com.facebook.app.FacebookContentProvider{app_id_1}"
}
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
resValue "string", "fb_provider_id", "com.facebook.app.FacebookContentProvider{app_id_2}"
}
а затем в AndroidManifest
<provider android:authorities="@string/fb_provider_id"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
Ответ 3
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
android:name="com.facebook.FacebookContentProvider"
android:exported="false"/>
экспортируется может быть "true"