Android facebook applicationId cannot be null

AndroidFacebook

Android Problem Overview


I've been following the following tutorial to integrate my app with Facebook. Facebook tutorial

I've followed everything on the tutorial, but I've been getting applicationId cannot be null in two cases, and it's really frustrating.

My FacebookActivity onCreate has the following, which is exactly the same as the tutorial:

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();
}

However when I try to display the activity I get applicationId cannot be null, and the line LogCat points me to is: uiHelper.onCreate(savedInstanceState);

So then I tried commenting out that line, and the activity is displayed. However now when I click on the LoginButton, I get the same error but this time is points me to the applicationId field in the LoginButton class from facebook.

I already have the Id in my string values and my manifest like this:

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

I tried getting the Id using code, but nothing changed.

What exactly is causing all this?

Android Solutions


Solution 1 - Android

> TL;DR: you have to write your application's ID in your strings.xml and then reference (i.e. @strings/fb_app_id), because if you put it directly (as value) into AndroidManifest.xml it won't work.

you must define your applicationId in the AndroidManifest.xml like this:

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

under <application android:label="@string/app_name".... tag

where app_id is a string within your strings.xml.


sample:

 <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>

** please note <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"/> is within <application> tag

-- and in strings.xml

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

Solution 2 - Android

Since today the answer is not quite correct. If someone didn't use this: AppEventsLogger.activateApp(this);

Since last update you must do it or your app will crashed. And you also should pass Application here not Context

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);
    }
}

Solution 3 - Android

The problem is that the id is being converted to integer: https://code.google.com/p/android/issues/detail?id=78839

In my case the facebook_app_id was being set from the build.gradle file per flavor.

The solution was to wrap the id with ":

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

or if you would rather avoid escaping:

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

Solution 4 - Android

This little code modification at the activity helped me.

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

Solution 5 - Android

Actually you do not have to use flavor codes in gradle...

if you have number longer than 4 Bytes, you should this code in strings.xml

> Note: Attention this quotation mark (")

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionKakalokiaView Question on Stackoverflow
Solution 1 - AndroidMohammad ErsanView Answer on Stackoverflow
Solution 2 - AndroidYura BuyaroffView Answer on Stackoverflow
Solution 3 - AndroidmaclirView Answer on Stackoverflow
Solution 4 - AndroidAhamed MujeebView Answer on Stackoverflow
Solution 5 - AndroidKalogluView Answer on Stackoverflow