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>