私は自分のアプリをFacebookと統合するために、次のチュートリアルに従っています。 Facebookチュートリアル
チュートリアルのすべてを実行しましたが、2つのケースで_applicationId cannot be null
_を取得しており、本当にイライラしています。
私の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を取得しようとしましたが、何も変わりませんでした。
これを正確に引き起こしているのは何ですか?
TL; DR:haveアプリケーションIDを
strings.xml
に書き込んでから参照(つまり@strings/fb_app_id
)します。なぜなら、(値として)直接AndroidManifest.xml
動作しません。
AndroidManifest.xml
でapplicationId
を次のように定義する必要があります。
<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>
今日以来、答えはまったく正しくありません。誰かがこれを使用しなかった場合: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);
}
}
問題は、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"'
アクティビティでのこの小さなコード変更は私を助けてくれました。
@Override
protected void onCreate(Bundle savedInstanceState) {
FacebookSdk.sdkInitialize(getApplicationContext());
AppEventsLogger.activateApp(getApplication());
super.onCreate(savedInstanceState);
...................
...................
}