无法findcom.facebook.katana.provider.AttributionIdProvider的提供者信息
任何人都知道这个错误是什么意思? 每当我连接到我的Android应用程序到Facebook(通过模拟器),我得到它在LogCatshell。
负责授权function的代码:
@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); }
这可能由于以下原因而发生:
- 你没有连接到互联网
- 您尚未授予互联网访问权限(Manifest.xml)
- 你没有使用正确的hashkey的应用程序
- 您没有提供正确的应用程序ID
这只是意味着你的手机上没有安装Facebook应用程序。 不要太担心。
Facebook SDK for Android的工作原理是,无论何时您需要向Facebook发送请求,SDK都会检查您的设备上是否已安装Facebook应用程序。 如果安装,请求是通过应用程序。 如果应用程序没有安装,它自己提取数据。
如果任何人的问题没有得到解决,这可能会有所帮助。 当我开始使用Fragments实现Facebooklogin时,我得到了同样的错误。 我正在使用标准的片段,而不是支持库v4片段,并切换到支持库片段后,我的问题就消失了。 这可能是我的情况是独一无二的,但我想分享一下,以防万一。 如果您使用loginbutton方法,也不要忘记设置Fragment。
myFacebookLoginButton.setFragment(this); //Assuming you're in a Fragment class
只需将以下权限添加到AndroidManifest.xml
<uses-permission android:name="android.permission.SET_DEBUG_APP"/>
正如@ Vinay-S-Shenoy所说,当Facebook应用程序没有安装在手机或模拟器上时,就会发生这种情况。 我做什么,以避免这个错误是检查如果Facebook应用程序之前安装它调用facebook.authorize方法,以防万一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; }
不要忘记重写onActivityResult并检查它是否被调用(例如,如果使用片段)
PS(也许这将是有用的其他人,我遇到了这个麻烦,当使用parsingFacebook的login=)
btnFb_photo_post.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // postPhotoToWall(facebook.getAccessToken()); facebook.authorize(MyFBTestActivity.this, new String[] { "publish_stream" }, new DialogListener() { @Override public void onFacebookError(FacebookError e) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); } @Override public void onError(DialogError dialogError) { // TODO Auto-generated method stub Toast.makeText(getApplicationContext(), dialogError.getMessage(), Toast.LENGTH_LONG).show(); } @Override public void onComplete(Bundle values) { postToWall(values.getString(Facebook.TOKEN)); } private void postToWall(String accessToken) { // Toast.makeText(getApplicationContext(), // "trying", Toast.LENGTH_LONG).show(); byte[] data = null; Bitmap bi = BitmapFactory.decodeResource( getResources(), R.drawable.ic_launcher ); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bi.compress(Bitmap.CompressFormat.JPEG, 100, baos); data = baos.toByteArray(); Bundle params = new Bundle(); // if (facebook.getAccessToken() != null) params.putString(Facebook.TOKEN, facebook.getAccessToken() ); params.putString("method", "photos.upload"); params.putString("caption", "www.samplelink.com"); // params.putString("message", // "www.google.com"); params.putByteArray("picture", data); AsyncFacebookRunner mAsyncRunner = new AsyncFacebookRunner(facebook); mAsyncRunner.request(null, params, "POST", new SampleUploadListener(), null); } @Override public void onCancel() { // TODO Auto-generated method stub } } ); } });
我正在使用此代码上传图片到FB墙。 尝试一次