仅当设置了opengraphobject.setproperty(“og:url”)时,Facebook SDK才能为用户生成预览

时间:2014-02-08 14:29:47

标签: android facebook facebook-sharer

我有一个应用程序,我想在Facebook上分享历史记录。我的应用程序没有网页。我只想分享带有标题和说明的图片,如果有可能,当点击共享网站时,他们会重定向到谷歌播放下载应用程序或Facebook应用程序页面。

我在大多数facebook样本中寻找答案,而且有些事情我肯定会做错。 我做了所有的Facebook应用程序配置。关键哈希等...我在开放图形中创建一个名为Publicar a Lugar的历史。行动=" Publicar"对象="卢格&#34 ;.

我有这段代码

private void OpenShareDialog(){
    Session session = Session.getActiveSession();

    if (session != null) {
        // Check for publish permissions
        List<String> permissions = session.getPermissions();
        if (!isSubsetOf(PERMISSIONS, permissions)) {
            pendingPublishReauthorization = true;
            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS);
            session.requestNewPublishPermissions(newPermissionsRequest);
            return;
        }

    }

    OpenGraphObject oplugar = OpenGraphObject.Factory.createForPost("namespace:lugar");
    oplugar.setProperty("og:type","namespace:lugar");
    oplugar.setProperty("og:title", LugarCargado.getNombre());
    //oplugar.setProperty("og:image", "http://estaticos.sport.es/resources/jpg/2/1/1391546433412.jpg");
    //oplugar.setProperty("og:url", "http://www.udg.edu/");
    oplugar.setProperty("og:description", LugarCargado.getDescripcion());

    //Bitmap bitmap;    
    //List<Bitmap> bitmaps = new ArrayList<Bitmap>();
    //bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.icoappfacebook2);
    //Log.i(TAG, "Imagen: Height:"+bitmap.getHeight()+ " Width:"+ bitmap.getWidth());
    //bitmaps.add(bitmap);

    //OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
    OpenGraphAction action = OpenGraphAction.Factory.createForPost("namespace:publicar");
    action.setProperty("lugar", oplugar);
    action.setType("namespace:publicar");
    action.setProperty("previewPropertyName", oplugar);

    FacebookDialog shareDialog = new FacebookDialog.OpenGraphActionDialogBuilder(this, action, "lugar")
            //.setImageAttachmentsForObject("lugar", bitmaps, true)
            //.setImageAttachmentsForAction(bitmaps,true);
            .build();

    uiHelper.trackPendingDialogCall(shareDialog.present()); 
}

我在智能手机中调试了两个不同的错误:

1-如果我取消注释其中一行

//oplugar.setProperty("og:image", "http://estaticos.sport.es/resources/jpg/2/1/1391546433412.jpg");
//oplugar.setProperty("og:url", "http://www.udg.edu/");

我有一个错误,上面写着&#34; com.facebook.FacebookException:无法为用户生成预览。&#34;。我不能推动网址

2-如果我想添加自定义图像。如果我取消注释此代码

//Bitmap bitmap;    
    //List<Bitmap> bitmaps = new ArrayList<Bitmap>();
    //bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.icoappfacebook2);
    //Log.i(TAG, "Imagen: Height:"+bitmap.getHeight()+ " Width:"+ bitmap.getWidth());
    //bitmaps.add(bitmap);

//.setImageAttachmentsForAction(bitmaps,true);

我有一个黑色的窗口,似乎有些东西重新启动......

  

02-08 15:09:46.500:W / GAV3(15911):线程[GAThread,5,main]:服务不可用(代码= 1),   将重试。   02-08 15:09:46.500:I / GAV3(15911):线程[GAThread,5,main]:否   广告系列数据。 02-08 15:09:48.482:D / AbsListView(15911):   unregisterIRListener()被称为02-08 15:09:48.982:   D / AbsListView(15911):调用onVisibilityChanged(),可见性:4   02-08 15:09:48.982:D / AbsListView(15911):unregisterIRListener()是   叫02-08 15:09:51.525:W / GAV3(15911):线程[服务   重新连接,5,主要]:服务不可用(代码= 1),使用本地存储。   02-08 15:09:53.778:D / AbsListView(16092):获取MotionRecognitionManager   02-08 15:09:53.778:D / AbsListView(16092):onVisibilityChanged()是   叫,能见度:8 02-08 15:09:53.778:D / AbsListView(16092):   unregisterIRListener()被称为02-08 15:09:53.788:   D / ProgressBar(16092):setProgress = 0 02-08 15:09:53.788:   D / ProgressBar(16092):setProgress = 0,fromUser = false 02-08   15:09:53.788:D / ProgressBar(16092):mProgress = 0mIndeterminate =   false,mMin = 0,mMax = 10000 02-08 15:09:53.828:   D / AbsListView(16092):调用onVisibilityChanged(),可见性:4   02-08 15:09:53.828:D / AbsListView(16092):unregisterIRListener()是   叫02-08 15:09:53.838:D / AbsListView(16092):   调用onVisibilityChanged(),可见性:0 02-08 15:09:53.838:   D / AbsListView(16092):unregisterIRListener()被称为02-08   15:09:53.848:D / libEGL(16092):已加载   /system/lib/egl/libEGL_adreno200.so 02-08 15:09:53.858:   D / libEGL(16092):已加载/system/lib/egl/libGLESv1_CM_adreno200.so   02-08 15:09:53.858:D / libEGL(16092):已加载   /system/lib/egl/libGLESv2_adreno200.so 02-08 15:09:53.858:   I / Adreno200-EGL(16092):: EGL 1.4   QUALCOMM build:

     

AYELDER_AU_LINUX_ANDROID_JB_2.5.5.04.02.02.092.023 + PATCH [ES] _msm8960_JB_2.5.5_CL3556704_release_ENGG(CL3556704)02-08 15:09:53.858:I / Adreno200-EGL(16092):构建日期:   05/17/13 Fri 02-08 15:09:53.858:I / Adreno200-EGL(16092):当地分行:   02-08 15:09:53.858:I / Adreno200-EGL(16092):远程分支:   quic / jb_2.5.5 02-08 15:09:53.858:I / Adreno200-EGL(16092):本地   补丁:34c9e193f12610d3e68dabd6198d2c4bfbc66974 RB:更新   主人

     

rb_texture_update_aliased 02-08中hw_image的时间戳   15:09:53.858:I / Adreno200-EGL(16092):重建分支:   AU_LINUX_ANDROID_JB_2.5.5.04.02.02.092.023 + 01d3c78 +

     

e6f0547 + LOCAL_PATCH [ES] 02-08 15:09:53.878:   D / OpenGLRenderer(16092):启用调试模式0 02-08 15:09:53.878:   D / ProgressBar(16092):updateDrawableBounds:left = 0 02-08   15:09:53.878:D / ProgressBar(16092):updateDrawableBounds:top = 0   02-08 15:09:53.878:D / ProgressBar(16092):updateDrawableBounds:right   = 72 02-08 15:09:53.878:D / ProgressBar(16092):updateDrawableBounds:bottom = 72 02-08 15:09:54.058:I / System(16092):加载时区   EN的名称为217ms(ICU为205ms)02-08 15:09:54.088:   D / AbsListView(16092):调用onVisibilityChanged(),可见性:0   02-08 15:09:54.088:D / AbsListView(16092):unregisterIRListener()是   叫02-08 15:09:54.168:D / AbsListView(16092):   unregisterIRListener()被称为02-08 15:09:54.178:   D / AbsListView(16092):unregisterIRListener()被称为02-08   15:09:54.188:E / ViewRootImpl(16092):sendUserActionEvent()mView ==   null 02-08 15:09:54.268:D / AbsListView(16092):unregisterIRListener()   被称为02-08 15:09:58.833:W / GAV3(16092):线程[GAThread,5,main]:   服务不可用(代码= 1),将重试。 02-08 15:09:58.833:   I / GAV3(16092):主题[GAThread,5,main]:未找到广告系列数据。 02-08   15:10:03.838:W / GAV3(16092):线程[服务重新连接,5,主要]:服务   不可用(代码= 1),使用本地商店。 02-08 15:10:10.565:   D / AbsListView(16092):调用unregisterIRListener()

并显示上一个活动。

使用上面的代码,sharedialog向我显示了facebook对话框,我可以分享。但没有链接,没有我的形象。

你能帮帮我吗?我尝试了很多不同的事情!

这是我的智能手机吗? facebook版本?

您是否有一个简单的示例来共享自定义(为用户制作)图像以及共享对话框中的描述?

谢谢,对不起我的英语。

2 个答案:

答案 0 :(得分:1)

如果您没有Web组件,则不要在og对象中设置URL。如果你设置了一个网址,facebook会尝试抓取该网址,如果从那里抓取的OG元数据与你提供的不匹配,那么它将会失败。

如果要在OG操作中添加位图,除了当前正在执行的操作外,还必须向清单添加NativeAppCallContentProvider。请参阅此处的文档:https://developers.facebook.com/docs/reference/android/current/class/NativeAppCallContentProvider/这就是Facebook应用程序实际获取您尝试发送的位图的方式。

最后,看一下sdk附带的Scrumptious示例应用程序。它有一个选项(如果你“跳过登录”),它创建一个带有图像附件的新OG对象。

答案 1 :(得分:0)

使用此代码它可以工作,我没有“无法生成预览”。 但是这段代码正在运行我想要的不同的东西。 此代码打开一个OGActiondialog,但是当我分享它时,帖子永远不会出现在Feed中并出现在活动注册表中但只显示照片,而不是名称或描述,如“普通”sharelink(左边的小照片和titol和说明)在右边)。

是否可以这样做?

private void OpenShareDialog2(){

    if (canPresentOGShareDialog) {
        Session session = Session.getActiveSession();

        if (session != null) {
            // Check for publish permissions
            List<String> permissions = session.getPermissions();
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);
                Log.d(TAG, "Permisos pedidos");
                return;
            }

        }

        OpenGraphObject oplugar = OpenGraphObject.Factory.createForPost("namespace:lugar");
        oplugar.setProperty("og:type","namespace:lugar");
        oplugar.setProperty("og:title", LugarCargado.getNombre());
        oplugar.setProperty("og:description", LugarCargado.getDescripcion());



        //OpenGraphAction action = GraphObject.Factory.create(OpenGraphAction.class);
        OpenGraphAction action = OpenGraphAction.Factory.createForPost("namespace:publicar");
        action.setProperty("lugar", oplugar);
        action.setType("namespace:publicar");
        //action.setProperty("previewPropertyName", "lugar");
        //action.setProperty("fb:explicitly_shared", true);
        //action.setExplicitlyShared(true);

        boolean userGenerated = false;
        if (urifoto != null) {
            String photoUriString = urifoto.toString();
            Pair<File, Integer> fileAndMinDimemsion = getImageFileAndMinDimension();
            userGenerated = fileAndMinDimemsion.second >= USER_GENERATED_MIN_SIZE;

            // If we have a content: URI, we can just use that URI, otherwise we'll need to add it as an attachment.
            if (fileAndMinDimemsion != null && urifoto.getScheme().startsWith("content")) {
                action.setImage(getImageListForAction(photoUriString, userGenerated));
            }
        }

        FacebookDialog.OpenGraphActionDialogBuilder builder = new FacebookDialog.OpenGraphActionDialogBuilder(this, action, "lugar");
                //.setFragment(SelectionFragment.this);

        if (urifoto != null && !urifoto.getScheme().startsWith("content")) {
            builder.setImageAttachmentFilesForAction(Arrays.asList(new File(urifoto.getPath())), userGenerated);
        }

        uiHelper.trackPendingDialogCall(builder.build().present()); 
    }
}

private Pair<File, Integer> getImageFileAndMinDimension() {
    File photoFile = null;
    String photoUriString = urifoto.toString();
    if (photoUriString.startsWith("file://")) {
        photoFile = new File(urifoto.getPath());
    } else if (photoUriString.startsWith("content://")) {
        String [] filePath = { MediaStore.Images.Media.DATA };
        Cursor cursor = this.getContentResolver().query(urifoto, filePath, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(filePath[0]);
            String filename = cursor.getString(columnIndex);
            cursor.close();

            photoFile = new File(filename);
        }
    }

    if (photoFile != null) {
        InputStream is = null;
        try {
            is = new FileInputStream(photoFile);

            // We only want to get the bounds of the image, rather than load the whole thing.
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(is, null, options);

            return new Pair<File, Integer>(photoFile, Math.min(options.outWidth, options.outHeight));
        } catch (Exception e) {
            return null;
        } finally {
            Utility.closeQuietly(is);
        }
    }
    return null;
}

我或多或少地从美味的样品中得到它!