簡體   English   中英

Android Facebook內容提供商權限

[英]Android Facebook content provider authority

我正在開發一個具有(至少)兩種不同包名稱的應用程序的應用程序 - 因此就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的文檔中找不到任何關於它的內容。 有沒有人這樣做過,你是如何解決提供商權限問題的呢? 謝謝。

我發現的一種可能的解決方案是這里描述的解決方案

http://gradlewhy.ghost.io/overcoming-install-failed-conflicting-provider/

我已經將它用於(調試/發布變體)android.support.v4.content.FileProvider,到目前為止,我已經測試過也適用於com.facebook.app.FacebookContentProvider。

只需添加到應用程序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"/>

我能夠通過為調試和發布版本提供單獨的清單來解決這個問題,在我的調試風格清單中,我為提供程序添加了代碼段,但將導出值設置為false。 在我的發布風格清單中,我有原始的提供程序片段,導出的設置為true。

在我這樣做之后,我不再收到INSTALL_FAILED_CONFLICTING_PROVIDER錯誤。

<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="false"/>
<provider android:authorities="com.facebook.app.FacebookContentProvider{app id here}"
            android:name="com.facebook.FacebookContentProvider"
            android:exported="false"/>

導出可以是“真實的”

如果您有一個項目和多種口味 (意味着:多個帶有微調的應用程序),就像我一樣,你可以

1.創建多個Facebook應用程序(來自https://developers.facebook.com/apps/

2.add代碼為correspoding味道

3.add facebook_app_id字符串值在相應的flavor文件夾中。

例:

應用程序/的build.gradle

...
flavorDimensions "regular"

productFlavors {
    flavour_name {
        dimension "regular"
        resValue "string", "authority", "com.facebook.app.FacebookContentProvider123456789"
    }

應用程序/ SRC /主/ AndroidManifest.xml中

  <meta-data android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/facebook_app_id"/>

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

應用程序/ SRC / flavour_name / RES /值/ string.xml

<string name="facebook_app_id" translatable="false">123456789</string>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM