Подтвердить что ты не робот

Управление сайтом 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. Кто-нибудь это сделал, и как вы столкнулись с проблемой полномочий поставщика? Спасибо.

4b9b3361

Ответ 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"