2016-08-04 6 views
1

FaceBook共有を実装しようとしましたが、ShareDialog.Mode.AUTOMATICを設定するとwebviewでのみ機能し、NATIVEに設定すると何も表示されず、何も表示されませんエラーコールバック。 Facebookアプリがエミュレータにインストールされています。マニフェストでShareDialogはFacebookブックアプリを開けません

プロバイダ:共有のため

<provider android:authorities="com.facebook.app.FacebookContentProvider{myAppId}" 
     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); 
} 

私はインテントを使用して共有を実装してみました、そしてそれは、それは常に結果を返すので、

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; 
     } 
    } 

はしかし私の場合、私は、同じくらい私が知っているように私の最後のソリューションが提供されていません成功した株式のコールバックを、必要とする作品キャンセルされました

答えて

1

あなたはそれに許可を宣言しましたか?以下のように:テント解決した後、私はちょうど私がアクセス権のためにログインすることなく、共有することができ想定し、https://github.com/minhhuy150894/simple-puzzle/blob/master/app/src/main/java/xyz/davidng/puzzle/FacebookShareImage.java

+0

あー:

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) {} }); 

これは私のサンプルコードです。 Intentソリューションのように、コールバックを取得する以外は、アプリケーションを許可せずにコンテンツを共有する方法はありませんか? –

+0

いいえ、主な理由はセキュリティだと思います。私たちは許可を宣言しなければなりません:) – alway5dotcom

+1

申し訳ありません、ありがとう –

関連する問題