2017-08-08 53 views
1

專家,問題在Android中手動設置火力地堡默認的應用程序參數

出於安全考慮,我們決定不使用谷歌與services.json和手動設置FirebaseApp默認參數。我正在關注博文here。我們使用的是Firebase SDK 10.2.6版本。

儘管我能夠成功設置FirebaseApp DEFAULT參數,但我仍收到錯誤消息: 缺少google_app_id。 Firebase Analytics已停用。

正如你從下面的代碼可以看到的,我在設置它之後檢查API密鑰,以便看起來該部分是正確的。

任何想法非常感謝!

在我的AndroidManifest.xml:

<provider 
    android:name="com.google.firebase.provider.FirebaseInitProvider" 
    android:authorities="${applicationId}.firebaseinitprovider" 
    tools:node="remove" 
    /> 
<provider 
    android:name="com.company.myapp.CustomFirebaseInitProvider" 
    android:authorities="${applicationId}.firebaseinitprovider" 
    /> 

我的自定義內容提供商:

public class CustomFirebaseInitProvider extends ContentProvider{ 

    public CustomFirebaseInitProvider() { 
    } 

    public void attachInfo(Context var1, ProviderInfo var2) { 
     super.attachInfo(var1, var2); 
    } 
    public boolean onCreate() { 

     // Set custom options 
     FirebaseOptions.Builder builder = new FirebaseOptions.Builder() 
       .setApiKey("valid_key") 
       .setApplicationId("valid_app_id") 
       .setGcmSenderId("valid_sender_id") 
       .setDatabaseUrl("valid_db_url") 
       .setStorageBucket("valid_storage_bucket"); 


     if(FirebaseApp.initializeApp(this.getContext(), builder.build()) == null) { 
      Log.i("FirebaseInitProvider", "FirebaseApp initialization unsuccessful"); 
     } else { 
      Log.i("FirebaseInitProvider", "FirebaseApp initialization successful"); 
     } 

     List<FirebaseApp> appList = FirebaseApp.getApps(this.getContext()); 
     for (int i=0; i< appList.size(); i++) 
     { 
      FirebaseApp app = appList.get(i); 
      String apiKey = app.getOptions().getApiKey(); 
      Log.d("TAG",apiKey); 
     } 

     return false; 
    } 


    @Nullable 
    public Cursor query(Uri var1, String[] var2, String var3, String[] var4, String var5) { 
     return null; 
    } 

    @Nullable 
    public String getType(Uri var1) { 
     return null; 
    } 

    @Nullable 
    public Uri insert(Uri var1, ContentValues var2) { 
     return null; 
    } 

    public int delete(Uri var1, String var2, String[] var3) { 
     return 0; 
    } 

    public int update(Uri var1, ContentValues var2, String var3, String[] var4) { 
     return 0; 
    } 

} 
+0

好像firebase sdk仍然在尋找string.xml中的參數。如果我在我的strings.xml中手動添加了有效密鑰,那麼我會通過該錯誤。但是,爲什麼它沒有從FirebaseOptions.Builder獲取密鑰? – dutchman711

+0

錯誤消息來自com.google.android.gms.internal下的類,因此出現Google Play服務錯誤。 – dutchman711

回答

0

這裏,似乎工作解決方法。

在strings.xml中爲您將在運行時替換的firebase/google鍵定義一些佔位符值。這樣,您可以通過'失蹤的google_api_id'錯誤。但是,google_app_id值需要有效。

<!-- Placeholder Values for Firebase. Will be replaced by decrypted keys at runtime --> 
<string name="google_app_id">valid_app_id</string> 
<string name="google_api_key">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string> 
<string name="google_crash_reporting_api_key">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string> 
<string name="google_storage_bucket">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string> 
+0

我不明白它是如何工作的。我試過你的解決方案,但是如果我將google_app_id放在字符串資源文件中,那麼在運行時不會替換該id。 – rMozes

+0

沒錯。我的解決方案是保護google_api_key以預防誤用。 – dutchman711