71

次のチュートリアルに従って、アプリを Facebook と統合しています。 Facebook チュートリアル

チュートリアルのすべてに従ったのですがapplicationId cannot be null、2 つのケースに遭遇してしまい、本当にイライラします。

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と同じエラーが表示されますが、今回は facebook の LoginButton クラスの applicationId フィールドを指しています。

私はすでに文字列値と次のようなマニフェストに Id を持っています:

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

コードを使用して ID を取得しようとしましたが、何も変わりませんでした。

このすべてを引き起こしているのは正確には何ですか?

4

5 に答える 5

226

TL;DR:アプリケーションの ID を記述してから参照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>
于 2013-04-22T21:19:13.450 に答える
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);
    }
}
于 2016-06-16T22:48:31.393 に答える
0

アクティビティでのこの小さなコード変更が役に立ちました。

@Override
    protected void onCreate(Bundle savedInstanceState) {

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

        super.onCreate(savedInstanceState);
        ...................
        ...................    
}
于 2016-06-17T08:39:28.160 に答える
-1

実際、グラドルでフレーバーコードを使用する必要はありません...

数値が 4 バイトを超える場合は、strings.xml でこのコードを指定する必要があります。

: この引用符 ( " )に注意してください。

<string name="facebook_app_id">"1111111111111"</string>
于 2015-06-07T23:09:12.360 に答える