web-dev-qa-db-fra.com

Android facebook applicationId ne peut pas être nul

J'ai suivi le tutoriel suivant pour intégrer mon application à Facebook. tutoriel Facebook

J'ai tout suivi sur le tutoriel, mais j'ai reçu applicationId cannot be null Dans deux cas, et c'est vraiment frustrant.

Mon FacebookActivityonCreate a ce qui suit, qui est exactement le même que le tutoriel:

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

Cependant, lorsque j'essaie d'afficher l'activité, j'obtiens applicationId cannot be null, Et la ligne vers laquelle LogCat me pointe est: uiHelper.onCreate(savedInstanceState);

Alors j'ai essayé de commenter cette ligne, et l'activité est affichée. Cependant, maintenant, lorsque je clique sur LoginButton, j'obtiens la même erreur, mais cette fois, il me pointe vers le champ applicationId dans la classe LoginButton de Facebook.

J'ai déjà l'ID dans mes valeurs de chaîne et mon manifeste comme ceci:

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

J'ai essayé d'obtenir l'ID en utilisant du code, mais rien n'a changé.

Qu'est-ce qui cause tout cela exactement?

70
Kakalokia

TL; DR: vous avez pour écrire l'ID de votre application dans votre strings.xml puis référence (c'est-à-dire @strings/fb_app_id), car si vous le mettez directement (comme valeur) dans AndroidManifest.xml ça ne marchera pas.

vous devez définir votre applicationId dans le AndroidManifest.xml comme ça:

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

en dessous de <application Android:label="@string/app_name".... tag

app_id est une chaîne dans votre strings.xml.


échantillon:

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

** Notez s'il vous plaît <meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/> est dans <application> tag

- et dans strings.xml

<string name="app_id">1389xxxxxxxx</string>
224
Mohammad Ersan

Depuis aujourd'hui, la réponse n'est pas tout à fait correcte. Si quelqu'un n'a pas utilisé ceci: AppEventsLogger.activateApp(this);

Depuis la dernière mise à jour, vous devez le faire, sinon votre application se bloquera. Et vous devez également passer Application ici pas Contexte

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);
    }
}
8
Yura Buyaroff

Le problème est que l'ID est en cours de conversion en entier: https://code.google.com/p/Android/issues/detail?id=78839

Dans mon cas, le facebook_app_id était en cours de configuration à partir du build.gradle fichier par saveur.

La solution consistait à envelopper l'ID avec ":

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

ou si vous préférez éviter de vous échapper:

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

Cette petite modification de code à l'activité m'a aidé.

@Override
    protected void onCreate(Bundle savedInstanceState) {

        FacebookSdk.sdkInitialize(getApplicationContext());
        AppEventsLogger.activateApp(getApplication());

        super.onCreate(savedInstanceState);
        ...................
        ...................    
}
0
Ahamed Mujeeb