INSTALL_FAILED_CONFLICTING_PROVIDER with Facebook SDK when I build multiple productFlavors
Asked Answered
M

3

8

I'm building an Android app with multiple productFlavors, and using Facebook SDK v4.1 for login and sharing contents. The problem is that when I try to install an app on a device which already has the same app installed (but different flavor), it raises an error. It doesn't allow me to install the second app unless I uninstall the existing one.

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

According to this document, the android:authorities should be unique and I should have multiple auths to accomplish what I want to do. However, I can't have multiple Facebook AppIds, and was wondering if there's better way to solve this problem. Thanks in advance to anyone who can help me!

Maneuver answered 9/6, 2015 at 5:42 Comment(4)
android:authorities="com.facebook.app.FacebookContentProvider{my_app_id}" needs to be unique. It seems that another app having same authorities. Read at #21271746Oxy
@PankajKumar Please read my question carefully.Maneuver
do u have any workaround for this problem now?Gressorial
See #33295617Unclose
A
7

Try below :

Manifest

<provider android:authorities="com.facebook.app.FacebookContentProvider${facebookId}"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />
<meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="fb${facebookId}"/>

Gradle

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.1"
    defaultConfig {
        applicationId "com.your.package"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        manifestPlaceholders = [facebookId:"123456789"]
    }

    productFlavors {
    debug {
        applicationIdSuffix ".debug"
        manifestPlaceholders = [facebookId:"1234"]
    }
    release {
        applicationIdSuffix ".pro"
        manifestPlaceholders = [facebookId:"123456789"]
    }
}
Anastigmatic answered 6/1, 2017 at 2:56 Comment(3)
Great answer, one question, why you need "fb" before fb${facebookId} ?Madonna
what a trick! without 'fb' before ${facebookId} app crash with "invalid app id' message, I think it is converted to number, and add prefix 'fb' can prevent this?Hegyera
@Madonna See Android Facebook source codeAnastigmatic
S
-1

You can use this:

Manifest

<provider android:authorities="@string/facebook_app_authority"
        android:name="com.facebook.FacebookContentProvider"
        android:exported="true" />

Gradle

productFlavors {
    flavor1 {
        applicationId "com.id.flavor1"
        versionCode 1
        versionName "1.0.0"
        resValue "string", "facebook_app_authority", "com.facebook.app.FacebookContentProvider0000000000000000"
    }
    flavor2 {
        applicationId "com.id.flavor2"
        versionCode 1
        versionName "1.0.0"
        resValue "string", "facebook_app_authority", "com.facebook.app.FacebookContentProvider0000000000000001"
    }
}

Replace 0000000000000000 to your App id

Soapbox answered 11/11, 2016 at 13:51 Comment(0)
P
-7
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="true"/>
Pressing answered 1/11, 2015 at 10:8 Comment(2)
How is this different to the existing provider definition?Jada
Copy pasted same code what is the difference in code for question and solutionBuyse

© 2022 - 2024 — McMap. All rights reserved.