1

タイトルが示すように、android で facebook/twitter を介して何かを共有したいと思います。facebook/twitter がインストールされている場合は、fb/twitter アプリケーションを介して投稿を共有したいと思います。それ以外の場合は、ユーザーをブラウザーに誘導します。 . ユーザーをブラウザに誘導するのは簡単ですが、fb/twitter アプリケーションを介して投稿を共有するにはどうすればよいですか?

ありがとう..

(編集済み)私はこれをやろうとしましたが、developers.facebook.comを調べましたが、フラグメントを介してこの操作を行っています。デフォルトのアクティビティでやりたいです。以下のコードを試しましたが、次のようなエラーが発生します

W/dalvikvm(16093): VFY: unable to find class referenced in signature     (Landroid/support/v4/app/Fragment;)
W/dalvikvm(16093): VFY: unable to find class referenced in signature (Landroid/support/v4/app/Fragment;)
W/dalvikvm(16093): VFY: unable to resolve static method 367: Landroid/support/v4/content/LocalBroadcastManager;.getInstance (Landroid/content/Context;)Landroid/support/v4/content/LocalBroadcastManager;

デフォルトのアクティビティで使用したコードは次のとおりです。

private void publishStory() {
        Session currentSession = Session.getActiveSession();


        if (currentSession != null){


            Bundle postParams = new Bundle();
            postParams.putString("name", Commons.campaignname);
            postParams.putString("display", "touch");
            postParams.putString("link",  Commons.campaignlink");
            postParams.putString("picture",Commons.campaignimage);

            Request.Callback callback= new Request.Callback() {
                public void onCompleted(Response response) {
                    JSONObject graphResponse = response
                                               .getGraphObject()
                                               .getInnerJSONObject();
                    String postId = null;
                    try {
                        postId = graphResponse.getString("id");
                    } catch (JSONException e) {
                        Log.i("TAG",
                            "JSON error "+ e.getMessage());
                    }
                    FacebookRequestError error = response.getError();
                    if (error != null) {
                        Toast.makeText(getApplicationContext(),
                             error.getErrorMessage(),
                             Toast.LENGTH_SHORT).show();
                        } else {
                            Toast.makeText(getApplicationContext(), 
                                 postId,
                                 Toast.LENGTH_LONG).show();
                    }
                }
            };

            Request request = new Request(currentSession, "me/feed", postParams, 
                                  HttpMethod.POST, callback);

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();
        }

    }

    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) {
        for (String string : subset) {
            if (!superset.contains(string)) {
                return false;
            }
        }
        return true;

}
4

2 に答える 2

2

Facebook android SDK を統合するよりも Facebook を使用して何かを投稿するには

Facebook SDK for Android の使用を開始する

フィード ダイアログを使用して Facebook に投稿します。インストールされている場合は自動的にfbアプリを開き、そうでない場合はブラウザで開きます

壁に投稿

public class PhotoViewer extends Activity implements StatusCallback{

    Button btnShare;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_photo_viewer);

        btnShare = (Button) findViewById(R.id.btnShare);

        btnShare.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Session.openActiveSession(PhotoViewer.this, true, PhotoViewer.this);

            }
        });

    }

    @Override
    public void call(Session session, SessionState state, Exception exception) {

        if (session.isOpened()) {
            publishFeedDialog();
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
    }

    private void publishFeedDialog() {

    Bundle params = new Bundle();
    params.putString("name", "Facebook SDK for Android");
    params.putString("caption", "Build great social apps and get more installs.");
    params.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps.");
    params.putString("link", "https://developers.facebook.com/android");
    params.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png");


        WebDialog feedDialog = (
                new WebDialog.FeedDialogBuilder(PhotoViewer.this,
                        Session.getActiveSession(),
                        params))
                        .setOnCompleteListener(new OnCompleteListener() {

                            @Override
                            public void onComplete(Bundle values,FacebookException error) {

                                if (error == null) {
                                    // When the story is posted, echo the success
                                    // and the post Id.
                                    final String postId = values.getString("post_id");
                                    if (postId != null) {
                                        //Toast.makeText(PhotoViewer.this,"Posted story, id: "+postId,Toast.LENGTH_SHORT).show();
                                        Toast.makeText(getApplicationContext(), "Publish Successfully!", Toast.LENGTH_SHORT).show();
                                    } else {
                                        // User clicked the Cancel button
                                        Toast.makeText(getApplicationContext(), "Publish cancelled", Toast.LENGTH_SHORT).show();
                                    }
                                } else if (error instanceof FacebookOperationCanceledException) {
                                    // User clicked the "x" button
                                    Toast.makeText(getApplicationContext(), "Publish cancelled", Toast.LENGTH_SHORT).show();
                                } else {
                                    // Generic, ex: network error
                                    Toast.makeText(getApplicationContext(),"Error posting story",Toast.LENGTH_SHORT).show();
                                }
                            }

                        })
                        .build();
        feedDialog.show();
    }

}

Fragment を使用していない場合は、 getActivity()の代わりにClassName.this のような Context を使用します。

編集

このコードを onCreate() に追加して、ハッシュ キーを出力してください

// Add code to print out the key hash
PackageInfo info = getPackageManager().getPackageInfo("com.your.package", // replace with your package name 
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());

        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));

    }
于 2013-06-18T08:50:46.710 に答える
0

このコードにより、facebook または twitter アプリケーションがデバイスにインストールされているかどうかを確認できます。条件がfalseの場合は、ロジックを配置できます

final PackageManager pm = getPackageManager();
List<ApplicationInfo> packages = pm
            .getInstalledApplications(PackageManager.GET_META_DATA);
for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package : " + packageInfo.packageName);
}

次にpackageInfo.packageName、そのアプリケーションのパッケージ名を含む文字列と等しいかどうかを確認できます。

于 2013-06-18T14:45:10.347 に答える