Android的facebook applicationId不能为null

我一直在关注以下教程,将我的应用程序与Facebook集成。 Facebook教程

我已经遵循了教程中的所有内容,但是在两种情况下,我得到的applicationId cannot be null ,这真的令人沮丧。

我的FacebookActivity onCreate具有以下内容,与教程完全相同:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); uiHelper = new UiLifecycleHelper(this, callback); uiHelper.onCreate(savedInstanceState); setContentView(R.layout.main_fb); FragmentManager fm = getSupportFragmentManager(); fragments[SPLASH] = fm.findFragmentById(R.id.splashFragment); fragments[SELECTION] = fm.findFragmentById(R.id.selectionFragment); FragmentTransaction transaction = fm.beginTransaction(); for(int i = 0; i < fragments.length; i++) { transaction.hide(fragments[i]); } transaction.commit(); } 

但是,当我尝试显示活动,我得到的applicationId cannot be null ,LogCat指向我的行是: uiHelper.onCreate(savedInstanceState);

所以然后我试着注释掉这一行,然后显示活动。 不过,现在当我点击LoginButton ,我得到了同样的错误,但是这一次是指向我从Facebook的LoginButton类中的applicationId字段。

我已经在我的string值和我的清单像这样的ID:

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

我试着让代码使用代码,但没有任何改变。

究竟是什么造成了这一切?

TL; DR:你必须在你的strings.xml编写你的应用程序的ID然后引用(即@strings/fb_app_id ),因为如果你直接把它作为值放到AndroidManifest.xml ,它将不起作用。

你必须像这样在AndroidManifest.xml定义你的applicationId

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

<application android:label="@string/app_name"....标签下

app_id是你的strings.xml一个string。


样品:

  <application android:label="@string/app_name" android:icon="@drawable/icon" android:theme="@android:style/Theme.NoTitleBar" > <activity android:name=".HelloFacebookSampleActivity" android:label="@string/app_name" android:windowSoftInputMode="adjustResize"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activity android:name="com.facebook.LoginActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:label="@string/app_name" /> <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> </application> 

**请注意<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/><application>标签内

– 并在strings.xml中

 <string name="app_id">1389xxxxxxxx</string> 

从今天起,答案是不正确的。 如果有人不使用这个: AppEventsLogger.activateApp(this);

自上次更新以来,您必须执行此操作,否则您的应用程序将崩溃。 你也应该在这里通过应用程序而不是上下文

https://developers.facebook.com/docs/android/getting-started

 // Add this to the header of your file: import com.facebook.FacebookSdk; public class MyApplication extends Application { // Updated your class body: @Override public void onCreate() { super.onCreate(); // Initialize the SDK before executing any other operations, FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(this); } } 

问题是该ID正在转换为整数: https : //code.google.com/p/android/issues/detail? id =78839

在我的情况下, facebook_app_id是从每个flavor的build.gradle文件中设置的。

解决方法是用"

 flavor.resValue "string", "facebook_app_id", "\"1111111111111\"" 

或者如果你宁愿避免逃跑:

 flavor.resValue "string", "facebook_app_id", '"1111111111111"' 

这个小小的代码修改帮助了我。

 @Override protected void onCreate(Bundle savedInstanceState) { FacebookSdk.sdkInitialize(getApplicationContext()); AppEventsLogger.activateApp(getApplication()); super.onCreate(savedInstanceState); ................... ................... } 

其实你不必在Gradle中使用风味代码…

如果你有超过4字节的数字,你应该在strings.xml中的这个代码

注意 :注意此引号(

 <string name="facebook_app_id">"1111111111111"</string>