2013-04-22 2 views
70

Я следил за следующим учебным пособием, чтобы интегрировать мое приложение с Facebook. Facebook tutorialAndroid facebook applicationId не может быть пустым

Я следил за всем в учебнике, но я получал applicationId cannot be null в двух случаях, и это действительно расстраивает.

Мои FacebookActivityonCreate имеет следующее, что точно так же, как учебник:

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, я получаю ту же ошибку, но на этот раз указывает мне поле applicationId в классе LoginButton из facebook.

У меня уже есть Id в моих строковых значений и мой манифест, как это:

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

Я пытался получать Id используя код, но ничего не изменилось.

Что именно вызывает все это?

ответ

225

TL; DR: Вы должны написать идентификатор вашего приложения в вашем strings.xml и затем ссылаться (т.е. @strings/fb_app_id), потому что, если вы поместите его непосредственно (как значения) в AndroidManifest.xml он не будет работать.

вы должны определить ваш applicationId в AndroidManifest.xml , как это:

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

под <application android:label="@string/app_name".... тег

где app_id является строкой в ​​вашем strings.xml.


образец:

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

Большое спасибо –

+0

Казалось вход с вкладки Application вставить мета-код в '' тег вместо в '' тега. Спасибо приятель ! – Megamind

+2

Ух ... в моей спешке я прочитал этот раздел в этом разделе. StackOverflow еще раз ftw. – Joe

7

Проблема заключается в том, что идентификатор преобразуется в целое число: https://code.google.com/p/android/issues/detail?id=78839

В моем случае facebook_app_id был установлен из файла build.gradle за каждый аромат.

Решение было завернуть идентификатор с ":

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

или если вы предпочли бы избежать побега:

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

flavor.resValue "string", "facebook_app_id", '"1111111111111"' Это решение работало для меня. Спасибо – MiloRambaldi

-1

На самом деле вы не должны использовать аромат кодов в Gradle ...

Если у вас есть номер более 4 байт, этот код должен быть указан в строках.xml

Примечание: Внимание это кавычка (")

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

С сегодняшнего дня ответ не совсем правильно. Если кто-то не использовал это: 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); 
    } 
} 
+2

Что, черт возьми. Это просто привело к сбою моего приложения. Является ли это мной или Facebook пытается изо всех сил шпионить за нами? Сначала они отключают выборку сообщений из своего графика api. Затем они отключают сообщения в мобильном браузере, если вы не установите их приложение для обмена сообщениями, которым необходимы разрешения 9271491724, теперь они заставляют вас регистрировать ваше приложение с помощью регистратора событий. Я являюсь параноиком? – SudoPlz

+0

@Yura Сохранял мою жизнь – Javier

+0

Когда они были добавлены: AppEventsLogger.activateApp (this); Несколько дней назад? Потому что вчера у меня не было проблем с этим – Binev

0

Эта небольшая модификация кода на деятельность помогла мне.

@Override 
    protected void onCreate(Bundle savedInstanceState) { 

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

     super.onCreate(savedInstanceState); 
     ................... 
     ...................  
} 
Смежные вопросы