facebook的Android共享意图-共享文本和链接

Posted

技术标签:

【中文标题】facebook的Android共享意图-共享文本和链接【英文标题】:Android share intent for facebook- share text AND link 【发布时间】:2012-02-04 23:30:06 【问题描述】:

我正在尝试使用 android 分享意图在 facebook 上发布一些内容。它看起来像这样:

shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Free education for all! http://linkd.in/xU8mCc");
startActivity(shareIntent);

所以我的帖子既有文字又有链接。但是当消息发布在facebook上时,它只有链接,没有消息。我尝试了各种附加功能,但没有任何效果。

有人遇到过这个问题并解决了吗?我有 facebook 应用程序版本 1.8.1

编辑:我尝试删除链接,但 facebook 应用程序没有接收我的消息(显示要发布的空白消息),但反之则不然。所以看起来该应用程序完全忽略了任何纯文本消息。我吓坏了!这是FB应用程序中根本无法发布短信(具有共享意图)的主要错误吗?

【问题讨论】:

你好 GreenBee 我也有同样的问题,但是这个链接现在打不开here is my Question请帮我解决这个问题 这是我的解决方案,仅用于共享 URL,***.com/a/29529335/513413 【参考方案1】:

我刚刚构建了这段代码,它对我有用:

private void shareAppLinkViaFacebook(String urlToShare) 
    try 
        Intent intent1 = new Intent();
        intent1.setClassName("com.facebook.katana", "com.facebook.katana.activity.composer.ImplicitShareIntentHandler");
        intent1.setAction("android.intent.action.SEND");
        intent1.setType("text/plain");
        intent1.putExtra("android.intent.extra.TEXT", urlToShare);
        startActivity(intent1);
     catch (Exception e) 
        // If we failed (not native FB app installed), try share through SEND
        String sharerUrl = "https://www.facebook.com/sharer/sharer.php?u=" + urlToShare;
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(sharerUrl));
        startActivity(intent);
    

【讨论】:

似乎 try 功能不起作用,虽然我的设备上安装了 Facebook 应用,但 catch 工作正常。 这里的消息在哪里? intent1.setPackage("com.facebook.katana");使用它而不是 intent1.setClassName("com.facebook.katana", "com.facebook.katana.activity.composer.ImplicitShareIntentHandler");【参考方案2】:

如果您打算使用常规的 Android 分享意图,那么不幸的是,Facebook 分享意图只能采用一个 URL(确保它有 http://),并且没有额外的文本消息。这是一个奇怪的限制,实际上没有任何意义。

您必须在项目中使用实际的官方单独的 Facebook Android SDK 才能获得完整的共享功能。这是额外的工作。

我遇到了类似的问题。最后,我所做的是分支意图。如果他们选择通过 Facebook 分享(在常规的 android 分享意图中),请创建一个只有 URL 的新分享意图并将其推送到 Facebook。所有其他共享选项(推特、消息、电子邮件)都可以正常工作。

我的问题和解决方案在这里:

Branching the Android Share Intent extras depending on which method they choose to share

  String shareBody = "app string text " + act_txt + " more text! Get the app at http://www.appurl.com";

PackageManager pm = view.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(sharingIntent, 0);
for(final ResolveInfo app : activityList) 
     Log.i(TAG, "app.actinfo.name: " + app.activityInfo.name);
    //if((app.activityInfo.name).contains("facebook")) 
          if("com.facebook.katana.ShareLinkActivity".equals(app.activityInfo.name)) 


        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, "http://www.appurl.com");
        startActivity(Intent.createChooser(sharingIntent, "Share idea"));
        break;
     else 
        sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "app name");
        sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
        startActivity(Intent.createChooser(sharingIntent, "Share"));
        break;
    

【讨论】:

感谢您的想法。但是为什么你总是在for 循环中使用break【参考方案3】:

在 Lollipop (21) 中,您可以使用 Intent.EXTRA_REPLACEMENT_EXTRAS 覆盖特定应用的意图。

https://developer.android.com/reference/android/content/Intent.html#EXTRA_REPLACEMENT_EXTRAS

private void doShareLink(String text, String link) 
  Intent shareIntent = new Intent(Intent.ACTION_SEND);
  shareIntent.setType("text/plain");
  Intent chooserIntent = Intent.createChooser(shareIntent, getString(R.string.share_via));

  // for 21+, we can use EXTRA_REPLACEMENT_EXTRAS to support the specific case of Facebook
  // (only supports a link)
  // >=21: facebook=link, other=text+link
  // <=20: all=link
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) 
    shareIntent.putExtra(Intent.EXTRA_TEXT, text + " " + link);
    Bundle facebookBundle = new Bundle();
    facebookBundle.putString(Intent.EXTRA_TEXT, link);
    Bundle replacement = new Bundle();
    replacement.putBundle("com.facebook.katana", facebookBundle);
    chooserIntent.putExtra(Intent.EXTRA_REPLACEMENT_EXTRAS, replacement);
   else 
    shareIntent.putExtra(Intent.EXTRA_TEXT, link);
  

  chooserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  startActivity(chooserIntent);

【讨论】:

【参考方案4】:

在我的应用程序中,我集成了 Facebook SDK 以使用户能够在他们的墙上分享报价 [预填充文本]。使用 FB SDK,可以做到这一点。它适用于我的应用,我有超过 5000 名用户使用它。

显然这不违反 FB 的政策,因为我没有收到任何警告或问题,这不起作用。

同样的代码sn-ps可以在这里找到,

Do any widely used Android apps have Facebook sharing with pre-populated text field?

【讨论】:

【参考方案5】:

使用此代码在 facebook 上分享图片、视频、链接和文本完美运行

 public class Shareonwall extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener 

    JSONObject response, profile_pic_data, profile_pic_url;
    TextView user_name, user_email;
    ImageView user_picture;
    NavigationView navigation_view;
    CallbackManager callbackManager;
    ShareDialog shareDialog;
    int REQUEST_CAMERA = 0, SELECT_FILE = 1;

    private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
    private Uri fileUri;
    //   public static TextView output;

    private static final int MY_PERMISSIONS_REQUEST_CAMERA = 110;

    private static final int MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE = 222;
    private static final int MY_PERMISSIONS_REQUEST_CAMERA_VIDEO = 333;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        facebookSDKInitialize();
        setContentView(R.layout.activity_details);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        Button button = (Button) findViewById(R.id.button);
        Button imageShare = (Button) findViewById(R.id.imageShare);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Home Page");

        Intent intent = getIntent();
        String jsondata = intent.getStringExtra("jsondata");

        setNavigationHeader();    // call setNavigationHeader Method.
        setUserProfile(jsondata);  // call setUserProfile Method.


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.setDrawerListener(toggle);
        toggle.syncState();
        shareDialog = new ShareDialog(this);  // intialize facebook shareDialog.

        navigation_view.setNavigationItemSelectedListener(this);
        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 


                if (ShareDialog.canShow(ShareLinkContent.class)) 
                    ShareLinkContent linkContent = new ShareLinkContent.Builder()
                            .setContentTitle("How to integrate Facebook from your app")
                            .setImageUrl(Uri.parse("http://www.devglan.com/image/dashboard.jpg"))
                            .setContentDescription(
                                    "simple Fb Image share integration")
                            .setContentUrl(Uri.parse("http://www.devglan.com/image/dashboard.jpg"))
                            .build();

                    shareDialog.show(linkContent);  // Show facebook ShareDialog
                
            
        );

        imageShare.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 
                selectImage();
            
        );

    

    // this method is for create a dialog box to choose options to select Image to share on facebook.
    private void selectImage() 
        final CharSequence[] items =  "Take Photo", "Choose from Library","Record Video",
                "Cancel" ;

        AlertDialog.Builder builder = new AlertDialog.Builder(Shareonwall.this);
        builder.setTitle("Select profile Photo!");
        builder.setItems(items, new DialogInterface.OnClickListener() 
            @Override
            public void onClick(DialogInterface dialog, int item) 
                if (items[item].equals("Take Photo")) 



                    if (Build.VERSION.SDK_INT >= 23) 
                        if ((ContextCompat.checkSelfPermission(Shareonwall.this,
                                android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                                == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(Shareonwall.this,
                                android.Manifest.permission.CAMERA)
                                == PackageManager.PERMISSION_GRANTED)) 



                            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                            startActivityForResult(intent, REQUEST_CAMERA);


                         else 

                            if ((ContextCompat.checkSelfPermission(Shareonwall.this,
                                    android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                                    == PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(Shareonwall.this,
                                    android.Manifest.permission.CAMERA)
                                    == PackageManager.PERMISSION_GRANTED)) 

                                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                startActivityForResult(intent, REQUEST_CAMERA);

                             else 


                                ActivityCompat.requestPermissions(Shareonwall.this,
                                        new String[]android.Manifest.permission.WRITE_EXTERNAL_STORAGE, android.Manifest.permission.CAMERA,
                                        MY_PERMISSIONS_REQUEST_CAMERA);
                                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                                startActivityForResult(intent, REQUEST_CAMERA);


                            

                        
                     else 

                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                        startActivityForResult(intent, REQUEST_CAMERA);;
                    

                     else if (items[item].equals("Choose from Library")) 



                    if (Build.VERSION.SDK_INT >= 23) 
                        if ((ContextCompat.checkSelfPermission(Shareonwall.this,
                                android.Manifest.permission.READ_EXTERNAL_STORAGE)
                                == PackageManager.PERMISSION_GRANTED)) 

                            Intent intent = new Intent(
                                    Intent.ACTION_PICK,
                                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            intent.setType("image/*");
                            startActivityForResult(
                                    Intent.createChooser(intent, "Select File"),
                                    SELECT_FILE);
                         else 

                            if ((ContextCompat.checkSelfPermission(Shareonwall.this,
                                    android.Manifest.permission.READ_EXTERNAL_STORAGE)
                                    == PackageManager.PERMISSION_GRANTED)) 


                             else 


                                ActivityCompat.requestPermissions(Shareonwall.this,
                                        new String[]Manifest.permission.READ_EXTERNAL_STORAGE,
                                        MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);


                            

                        
                     else 
                        Intent intent = new Intent(
                                Intent.ACTION_PICK,
                                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                        intent.setType("image/*");
                        startActivityForResult(
                                Intent.createChooser(intent, "Select File"),
                                SELECT_FILE);
                    


                 if (items[item].equals("Record Video")) 


                    if (Build.VERSION.SDK_INT >= 23) 
                        if ((ContextCompat.checkSelfPermission(Shareonwall.this,
                                android.Manifest.permission.READ_EXTERNAL_STORAGE)
                                == PackageManager.PERMISSION_GRANTED)) 

                            Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                            if (takeVideoIntent.resolveActivity(getPackageManager()) != null) 
                                startActivityForResult(takeVideoIntent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
                            
                         else 

                            if ((ContextCompat.checkSelfPermission(Shareonwall.this,
                                    android.Manifest.permission.READ_EXTERNAL_STORAGE)
                                    == PackageManager.PERMISSION_GRANTED)) 


                             else 


                                ActivityCompat.requestPermissions(Shareonwall.this,
                                        new String[]Manifest.permission.READ_EXTERNAL_STORAGE,
                                        MY_PERMISSIONS_REQUEST_CAMERA_VIDEO);


                            

                        
                     else 
                        Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                        if (takeVideoIntent.resolveActivity(getPackageManager()) != null) 
                            startActivityForResult(takeVideoIntent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
                        
                    


                 else if (items[item].equals("Cancel")) 
                    dialog.dismiss();
                
            
        );
        builder.show();
    


    @Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        callbackManager.onActivityResult(requestCode, resultCode, data);

        if (resultCode == Activity.RESULT_OK) 

            if (requestCode == SELECT_FILE)

                onSelectFromGalleryResult(data);


            

            else if (requestCode == REQUEST_CAMERA)

                onCaptureImageResult(data);

            
            if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE && resultCode == RESULT_OK) 
                //   Uri videoUri = data.getData();
                //   mVideoView.setVideoURI(videoUri);
                //  recordVideo(videoUri);
                String selectedVideoFilePath = GetFilePathFromDevice.getPath(this, data.getData());
                final byte[] datas;
                try 
                    datas = readBytes(selectedVideoFilePath,data.getData());
                    PostVideo(datas, selectedVideoFilePath);
                 catch (IOException e) 
                    e.printStackTrace();
                

            

        
    
    public byte[] readBytes(String dataPath,Uri uri) throws IOException 
        InputStream inputStream = new FileInputStream(dataPath);
        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != -1) 
            byteBuffer.write(buffer, 0, len);
        
        ShareDialogVideo(uri);
        return byteBuffer.toByteArray();
    
    public void PostVideo(byte[] VideoBytes, String filePath) 
        String url;
        url = "/me/videos";

        AccessToken token = AccessToken.getCurrentAccessToken();
        if (token != null) 
            Bundle param = new Bundle();
            param.putByteArray("video." + getFileExt(filePath), VideoBytes);
            param.putString("description", "sample video");
            new GraphRequest(token,url, param, HttpMethod.POST, new GraphRequest.Callback() 

                public void onCompleted(GraphResponse response) 
                    Log.e("New Post", "Res =" + response.toString());
                    //  dialog.dismiss();

                    if (response != null && response.getJSONObject() != null && response.getJSONObject().has("id")) 
                        Log.e("New Post", "Success");
                        Toast.makeText(Shareonwall.this, "Video posted successfully.", Toast.LENGTH_SHORT).show();
                     else 
                        Toast.makeText(Shareonwall.this, "Error in posting Video.", Toast.LENGTH_SHORT).show();
                    
                    setResult(Activity.RESULT_OK, new Intent());
                    finish();
                
            ).executeAsync();
        
    
    public static String getFileExt(String fileName) 
        return fileName.substring((fileName.lastIndexOf(".") + 1), fileName.length());
    

    /**** this method used for select image From Gallery  *****/


    private void onSelectFromGalleryResult(Intent data) 
        Uri selectedImageUri = data.getData();
        String[] projection =  MediaStore.MediaColumns.DATA ;
        Cursor cursor = managedQuery(selectedImageUri, projection, null, null,
                null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
        cursor.moveToFirst();

        String selectedImagePath = cursor.getString(column_index);

        Bitmap thumbnail;
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(selectedImagePath, options);
        final int REQUIRED_SIZE = 200;
        int scale = 1;
        while (options.outWidth / scale / 2 >= REQUIRED_SIZE
                && options.outHeight / scale / 2 >= REQUIRED_SIZE)
            scale *= 2;
        options.inSampleSize = scale;
        options.inJustDecodeBounds = false;
        thumbnail = BitmapFactory.decodeFile(selectedImagePath, options);

        ShareDialog(thumbnail);
    

    /***  this method used for take profile photo *******/

    private void onCaptureImageResult(Intent data) 
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes);

        File destination = new File(Environment.getExternalStorageDirectory(),
                System.currentTimeMillis() + ".jpg");

        FileOutputStream fo;
        try 
            destination.createNewFile();
            fo = new FileOutputStream(destination);
            fo.write(bytes.toByteArray());
            fo.close();
         catch (FileNotFoundException e) 
            e.printStackTrace();
         catch (IOException e) 
            e.printStackTrace();
        

        ShareDialog(thumbnail);
    



    // This method is used to share Image on facebook timeline.
    public void ShareDialog(Bitmap imagePath)

        SharePhoto photo = new SharePhoto.Builder()
                .setBitmap(imagePath)
                .setCaption("Testing")
                .build();
        SharePhotoContent content = new SharePhotoContent.Builder()
                .addPhoto(photo)
                .build();

        shareDialog.show(content);

    
    public void ShareDialogVideo(Uri imagePath)

        ShareVideo  shareVideo = new ShareVideo.Builder()
                .setLocalUrl(imagePath)
                .build();
        ShareVideoContent content = new ShareVideoContent.Builder()
                .setVideo(shareVideo)
                .build();
        shareDialog.show(content);

    


    // Initialize the facebook sdk and then callback manager will handle the login responses.

    protected void facebookSDKInitialize() 

        FacebookSdk.sdkInitialize(getApplicationContext());

        callbackManager = CallbackManager.Factory.create();
    


    @Override
    public void onBackPressed() 
        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        if (drawer.isDrawerOpen(GravityCompat.START)) 
            drawer.closeDrawer(GravityCompat.START);
         else 
            super.onBackPressed();
        
    

    /*
        Set Navigation header by using Layout Inflater.
     */

    public void setNavigationHeader()

        navigation_view = (NavigationView) findViewById(R.id.nav_view);

        View header = LayoutInflater.from(this).inflate(R.layout.nav_header_home, null);
        navigation_view.addHeaderView(header);

        user_name = (TextView) header.findViewById(R.id.username);
        user_picture = (ImageView) header.findViewById(R.id.profile_pic);
        user_email = (TextView) header.findViewById(R.id.email);
    

    /*
       Set User Profile Information in Navigation Bar.
     */

    public  void  setUserProfile(String jsondata)

        try 
            response = new JSONObject(jsondata);
            user_email.setText(response.get("email").toString());
            user_name.setText(response.get("name").toString());
            profile_pic_data = new JSONObject(response.get("picture").toString());
            profile_pic_url = new JSONObject(profile_pic_data.getString("data"));

            Picasso.with(this).load(profile_pic_url.getString("url"))
                    .into(user_picture);

         catch (Exception e)
            e.printStackTrace();
        
    

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
        // Inflate the menu; this adds items to the action bar if it is present.
        //   getMenuInflater().inflate(R.menu.home, menu);
        return true;
    

    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) 
            return true;
        

        return super.onOptionsItemSelected(item);
    

    @SuppressWarnings("StatementWithEmptyBody")
    @Override
    public boolean onNavigationItemSelected(MenuItem item) 
        // Handle navigation view item clicks here.
        int id = item.getItemId();

        if (id == R.id.nav_camera) 
            // Handle the camera action
         else if (id == R.id.nav_gallery) 

         else if (id == R.id.nav_slideshow) 

         else if (id == R.id.nav_manage) 

         else if (id == R.id.nav_share) 

         else if (id == R.id.nav_send) 

        

        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        drawer.closeDrawer(GravityCompat.START);
        return true;
    

    @Override
    protected void onResume() 
        super.onResume();

        // Logs 'install' and 'app activate' App Events.
        AppEventsLogger.activateApp(this);
    

    @Override
    protected void onPause() 
        super.onPause();

        // Logs 'app deactivate' App Event.
        AppEventsLogger.deactivateApp(this);
    

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        switch (requestCode) 
            case MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE: 
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) 


                    Intent intent = new Intent(
                            Intent.ACTION_PICK,
                            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                    intent.setType("image/*");
                    startActivityForResult(
                            Intent.createChooser(intent, "Select File"),
                            SELECT_FILE);

                 else 


                
                return;
            

            case MY_PERMISSIONS_REQUEST_CAMERA: 
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) 


                    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                    startActivityForResult(intent, REQUEST_CAMERA);

                 else 


                
                return;
            
            case MY_PERMISSIONS_REQUEST_CAMERA_VIDEO :

                Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
                if (takeVideoIntent.resolveActivity(getPackageManager()) != null) 
                    startActivityForResult(takeVideoIntent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);

                



            



            // other 'case' lines to check for other
            // permissions this app might request
        
    



【讨论】:

以上是关于facebook的Android共享意图-共享文本和链接的主要内容,如果未能解决你的问题,请参考以下文章

使用 facebook SDK 仅共享文本

使用 Facebook SDK 4.2 共享图片和文本

使用 Android 分享 Intent 在 Facebook 上分享视频

使用android意图将带有图像的文本共享到instagram

如何从 android 应用程序将纯文本共享到 facebook messenger

无法使用 android 上的 cordova s​​ocialsharing 插件在 facebook 上共享自定义文本