通过android / facebook上的facebook / twitter应用程序分享,如果设备上安装了facebook / twitter,请不要打开浏览器

时间:2013-06-18 08:48:33

标签: android facebook twitter share

正如标题所暗示的,我想通过facebook / twitter在android中分享一些内容。如果安装了facebook / twitter,我想通过fb / twitter应用程序分享帖子,否则我想直接发送给用户到浏览器。我可以将用户引导到浏览器很容易,但是如何通过fb / twitter应用程序共享帖子?

谢谢..

(Editted) 我试过这样做,检查了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;

}

2 个答案:

答案 0 :(得分:2)

使用Facebook发布内容而非整合Facebook android sdk

Getting Started with the Facebook SDK for Android

使用Feed对话框在Facebook上发布。它会自动打开fb app,如果它已安装,否则在浏览器中打开

Post to wall

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

}

如果你没有使用片段而不是使用像ClassName.this 这样的上下文而不是 getActivity()

修改

请在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));

    }

答案 1 :(得分:0)

通过此代码,您可以检查设备上是否安装了facebook或twitter应用程序。 如果条件为假,你可以放置你的逻辑

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是否等于包含该应用程序包名称的某个字符串。