このエラーの意味を知っている人はいますか? AndroidアプリケーションをFacebookに(エミュレータ経由で)接続するたびに、LogCat Shellで取得します。
機能の許可を担当するコード:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.authorize);
mPrefs = getPreferences(MODE_PRIVATE);
loginPref = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String access_token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
if(access_token != null) {
Singelton.mFacebook.setAccessToken(access_token);
}
if(expires != 0) {
Singelton.mFacebook.setAccessExpires(expires);
}
Singelton.mFacebook.authorize(this, new String[] {"email","user_birthday"}, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", Singelton.mFacebook.getAccessToken());
editor.putLong("access_expires", Singelton.mFacebook.getAccessExpires());
editor.commit();
SharedPreferences.Editor logEditor = loginPref.edit();
logEditor.putBoolean("login", true);
logEditor.commit();
addUser();
}
@Override
public void onFacebookError(FacebookError error) {
errorHandler();
}
@Override
public void onError(DialogError e) {
errorHandler();
}
@Override
public void onCancel() {
Log.d("MyApp", "Facebook cancel");
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Singelton.mFacebook.authorizeCallback(requestCode, resultCode, data);
}
これは、次の理由で発生する可能性があります。
Facebookアプリが携帯電話にインストールされていないことを意味します。あまり心配しないでください。
AndroidのFacebook SDKが機能する方法は、Facebookにリクエストを行う必要があるときはいつでも、SDKはFacebookアプリがデバイスに既にインストールされているかどうかを確認することです。リクエストはアプリを介して行われ、アプリがインストールされていない場合は、アプリ自体でデータを取得します。
誰かの問題が4つの解決策で改善されなかった場合、これが役立つかもしれません。 Facebookログインを実装するためにフラグメントを使用し始めたとき、私はこの同じエラーを受け取っていました。サポートライブラリv4フラグメントではなく、標準のフラグメントを使用していたため、サポートライブラリフラグメントに切り替えた後、問題はなくなりました。これは私の状況に固有のものかもしれませんが、念のため共有したいと思いました。また、ログインボタンメソッドを使用している場合は、フラグメントを設定することを忘れないでください。
myFacebookLoginButton.setFragment(this); //Assuming you're in a Fragment class
AndroidManifest.xmlに次の権限を追加するだけです
<uses-permission Android:name="Android.permission.SET_DEBUG_APP"/>
OnActivityResultをオーバーライドし、それが呼び出されたかどうかを確認することを忘れないでください(たとえば、フラグメントを使用している場合)
PS(おそらく他の人にとっては役に立つでしょう、parse facebook login =を使用していたときにこの問題に直面しました)
@ Vinay-S-Shenoyが言ったように、それはFacebookアプリが電話やシミュレーターにインストールされていないときに起こります。このエラーを回避するには、facebook.authorizeメソッドを呼び出す前にFacebookアプリがインストールされているかどうかを確認します。facebookアプリがインストールされていない場合は、このメッセージをユーザーに通知します。
public boolean isFacebookAvailable() {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, "Test; please ignore");
intent.setType("text/plain");
final PackageManager pm = this.getApplicationContext().getPackageManager();
for(ResolveInfo resolveInfo: pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY)){
ActivityInfo activity = resolveInfo.activityInfo;
// Log.i("actividad ->", activity.name);
if (activity.name.contains("com.facebook.katana")) {
return true;
}
}
return false;
}
私にとっては(ただし、私はionicで作業します)、それは起動前の画像の欠落/テンプレートエラーのためでした:
ionic cordova build Android
たぶん他の人を助けることができる...