ShareDialog 无法打开 Facebook 应用程序
Posted
技术标签:
【中文标题】ShareDialog 无法打开 Facebook 应用程序【英文标题】:ShareDialog doesn't open facebook app 【发布时间】:2016-08-04 08:32:21 【问题描述】:尝试实现 facebook 共享,但是如果我设置 ShareDialog.Mode.AUTOMATIC,它只能在 webview 中工作,如果我将它设置为 NATIVE,那么什么都不会显示,我也不会收到任何错误回调。 Facebook 应用程序已安装在模拟器中。
清单中的提供者:
<provider android:authorities="com.facebook.app.FacebookContentProvidermyAppId"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"/>
分享代码:
public void share(String contentUrl,
Activity activity)
ShareLinkContent content = new ShareLinkContent.Builder()
.setContentUrl(Uri.parse(contentUrl))
.build();
ShareDialog dialog = new ShareDialog(activity);
dialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>()
@Override
public void onSuccess(Sharer.Result result)
EventBus.getDefault().post(new ShareEvent(true));
@Override
public void onCancel()
Log.e(TAG, "Facebook Share Cancel");
EventBus.getDefault().post(new ShareEvent(false));
@Override
public void onError(FacebookException error)
Log.e(TAG, "Facebook share error: " + error.getMessage());
EventBus.getDefault().post(new ShareEvent(false));
)
dialog.show(content, ShareDialog.Mode.NATIVE);
我正在从片段中调用 share(..) 方法。
我尝试使用 Intent 实现共享,效果很好
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://myUrl.com");
PackageManager pm = activity.getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList)
if ((app.activityInfo.name).contains("facebook"))
final ActivityInfo mActivity = app.activityInfo;
final ComponentName name = new ComponentName(mActivity.applicationInfo.packageName, mActivity.name);
shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
shareIntent.setComponent(name);
activity.startActivity(shareIntent);
break;
但是在我的情况下,我需要成功的共享回调,据我所知,我的上一个解决方案没有提供,因为它总是返回结果 CANCELED
【问题讨论】:
【参考方案1】:您是否已声明许可?如下:
FacebookSdk.sdkInitialize(getApplicationContext());
callbackManager = CallbackManager.Factory.create();
List<String> permissionNeeds = Arrays.asList("publish_actions"); // permission.
loginManager = LoginManager.getInstance();
loginManager.logInWithPublishPermissions(this, permissionNeeds);
loginManager.registerCallback(callbackManager, new FacebookCallback<LoginResult>()
@Override
public void onSuccess(LoginResult loginResult)
// do something here
finish();
@Override
public void onCancel()
@Override
public void onError(FacebookException exception)
);
这是我的示例代码:https://github.com/minhhuy150894/simple-puzzle/blob/master/app/src/main/java/xyz/davidng/puzzle/FacebookShareImage.java
【讨论】:
哦,在 Intent 解决方案之后,我只是假设我可以在不登录获取权限的情况下共享。有没有办法在不授权应用程序的情况下共享内容,就像使用 Intent 解决方案一样,除了从中获取回调? 不,我认为主要原因是安全性。我们必须声明权限:)以上是关于ShareDialog 无法打开 Facebook 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
Android Facebook SDK 4.0 ShareDialog 不显示长文本
使用 FB Message Dialog iphone sdk 打开 facebook messenger