web-dev-qa-db-ja.com

Android facebook applicationIdはnullにできません

私は自分のアプリをFacebookと統合するために、次のチュートリアルに従っています。 Facebookチュートリアル

チュートリアルのすべてを実行しましたが、2つのケースで_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をクリックすると同じエラーが発生しますが、今回はfacebookのLoginButtonクラスのapplicationIdフィールドを指しています。

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

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

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

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

70
Kakalokia

TL; DR:haveアプリケーションIDをstrings.xmlに書き込んでから参照(つまり@strings/fb_app_id)します。なぜなら、(値として)直接AndroidManifest.xml動作しません。

AndroidManifest.xmlapplicationIdを次のように定義する必要があります。

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

<application Android:label="@string/app_name"....タグの下

ここで、app_idstrings.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>
224
Mohammad Ersan

今日以来、答えはまったく正しくありません。誰かがこれを使用しなかった場合:AppEventsLogger.activateApp(this);

前回のアップデート以降、それを行う必要があります。そうしないと、アプリがクラッシュします。また、Applicationを渡す必要もありますContext

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

問題は、IDが整数に変換されていることです: https://code.google.com/p/Android/issues/detail?id=78839

私の場合、facebook_app_idはフレーバーごとにbuild.gradleファイルから設定されていました。

解決策は、IDを"でラップすることでした。

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

または、エスケープを避けたい場合:

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

アクティビティでのこの小さなコード変更は私を助けてくれました。

@Override
    protected void onCreate(Bundle savedInstanceState) {

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

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