![](/img/trans.png)
[英]Android Facebook content provider authority change programmatically
[英]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.