Подтвердить что ты не робот

Android facebook applicationId не может быть нулевым

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

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

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

У меня уже есть Id в моих строковых значениях, и мой манифест выглядит следующим образом:

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

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

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

4b9b3361

Ответ 1

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>

Ответ 2

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

Ответ 3

Проблема заключается в том, что id преобразуется в целое число: 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"'

Ответ 4

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

@Override
    protected void onCreate(Bundle savedInstanceState) {

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

        super.onCreate(savedInstanceState);
        ...................
        ...................    
}

Ответ 5

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

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

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

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