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 FacebookActivity
onCreate
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?
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) dansAndroidManifest.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
où 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>
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);
}
}
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"'
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);
...................
...................
}