jjzjj

android - Facebook SDK 的 logInWithPublishPermissions 卡在永久微调器上

coder 2023-12-04 原文

我想询问我的 Android 应用程序的用户是否允许在按下自定义共享按钮(它只是一个 ImageView)时在 Facebook 上发布。在按钮的 OnClick 方法上,我执行此 block :

CallbackManager facebookCallbackManager;    

...

facebookCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().registerCallback(facebookCallbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                shareContent(activity, content, true);
            }
            @Override
            public void onCancel() { }

            @Override
            public void onError(FacebookException error) { }
        });
LoginManager.getInstance().logInWithPublishPermissions(activity, Collections.singletonList("publish_actions"));

然后我覆盖:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data); 
    facebookCallbackManager.onActivityResult(requestCode, resultCode, data);
}

问题是请求永远不会到来:出现了一个永恒的旋转轮,并且没有回调(既没有成功,也没有取消,也没有错误)被调用。

一个。用户已经登录,根据:

public static boolean isLoggedIn() {
   AccessToken accessToken = AccessToken.getCurrentAccessToken();
   return accessToken != null;
}

FacebookSdk.isInitialized() 为真

根据以下内容,授予发布权限:

private static boolean hasPublishPermissions() {
    AccessToken accessToken = AccessToken.getCurrentAccessToken();
    return accessToken != null && accessToken.getPermissions().contains("publish_actions");
}

FB SDK 的其他用途是通过应用程序使用并且它们正在运行。

我是 FB 仪表板上的应用程序管理员

对这个问题有什么想法吗?

重要提示:

由于 Facebook 的 API 非常稳定,根据一天中的时间或星星的位置,无需更改代码我有三种可能的结果:

  1. 如前所述,一个永恒的万向轮。

  2. 回调触发 onCancel 方法,无需用户交互。

  3. 它在不要求确认的情况下分享内容 - 这给了我一个很好的不需要的视频发布在我的个人 FB 上,而我没有注意到 :) -

    PS2: 即使是经典的 LoginManager.getInstance().logInWithReadPermission 现在也有同样的问题。它以前从未有过。

最佳答案

然后你可以在没有永久旋转器的情况下分享内容

 LoginManager.getInstance().registerCallback(mCallbackManagerFacebook, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            System.out.println("Success");
            if (loginResult.getRecentlyGrantedPermissions().contains("publish_actions")) {
                new shareContent(activity, content, true);

            }  else {
                //Toast.makeText(youractivity.this, "Successfully Connected to Facebook.", Toast.LENGTH_LONG).show();

                GetFacebookPublishPermissions();

            }
        }

        @Override
        public void onCancel() {
            //Log.d(TAG_CANCEL, "On cancel");
            LoginManager.getInstance().logOut();
        }

        @Override
        public void onError(FacebookException error) {
            Toast.makeText(youractivity.this, "Looks like we are unable to connect to Facebook Servers.", Toast.LENGTH_LONG).show();
            LoginManager.getInstance().logOut();
            // Log.d(TAG_ERROR, error.toString());
        }
    });

并获得FacebookShare权限

 public void GetFacebookPublishPermissions(){
    if(LoginManager.getInstance()!=null)
    {
        LoginManager.getInstance().logInWithPublishPermissions(youractivity.this, Arrays.asList("publish_actions"));

    }
}

Update

你可以像下面这样调用这个函数

      AccessToken token = com.facebook.AccessToken.getCurrentAccessToken();
        if(token!=null)
        {
            if (token.getPermissions().contains("publish_actions")) {
            new shareContent(activity, content, true);
        }else{
        GetFacebookPublishPermissions();
        }
   }else{
         LoginManager.getInstance().logInWithReadPermissions(this, 
         Arrays.asList("public_profile", "email", "user_birthday"));
   }

关于android - Facebook SDK 的 logInWithPublishPermissions 卡在永久微调器上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652014/

有关android - Facebook SDK 的 logInWithPublishPermissions 卡在永久微调器上的更多相关文章

  1. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  2. ruby-on-rails - rvm 和 rbenv 在同一台机器上 - 2

    传统上,我在个人笔记本电脑上使用rbenv进行所有个人项目,没有任何问题并且喜欢它。但是,我需要在工作中开始使用代码库(rails),并且我们在所有工作笔记本电脑上都使用rvm。有什么方法可以让rvm和rbenv快乐地生活在一起,或者我是否应该能够在没有rvm的情况下引导应用程序并只使用rbenv来管理这个repo的本地ruby? 最佳答案 你真的不能让rbenv和rvm共存。使用rvm,它会覆盖“gem”命令,因此会使rbenv变得无用。如果你想对两者都使用rbenv,你必须避免使用gemsets,而是使用bundler来处理依赖

  3. ruby - 一个网络服务器上有多个 Ruby 版本? - 2

    理想使用rvm,如果能够在一个网络服务器上拥有多个Rubies,并且通过某种服务器配置,能够在每个项目的基础上将Ruby版本分配给不同的Rails/Sinatra/等应用程序,那将是非常棒的。我从rvm的文档中了解到,Passenger一次只能使用一个Ruby。:(妥协否则,至少能够想出一种方法将项目分配给Ruby1.8或Ruby1.9解释器会很好。我读过使用Nginx作为反向代理允许在同一个盒子上运行Apache和Nginx。那么是否有可能让Apache+Passenger使用一个Ruby,而Nginx+Passenger使用另一个?也许在Nginx中使用Passenger以外的东西

  4. Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信) - 2

    运行有问题或需要源码请点赞关注收藏后评论区留言一、利用ContentResolver读写联系人在实际开发中,普通App很少会开放数据接口给其他应用访问。内容组件能够派上用场的情况往往是App想要访问系统应用的通讯数据,比如查看联系人,短信,通话记录等等,以及对这些通讯数据及逆行增删改查。首先要给AndroidMaifest.xml中添加响应的权限配置 下面是往手机通讯录添加联系人信息的例子效果如下分成三个步骤先查出联系人的基本信息,然后查询联系人号码,再查询联系人邮箱代码 ContactAddActivity类packagecom.example.chapter07;importandroid

  5. ruby - 在 Capistrano 3 中永久切换用户(单独授权和部署) - 2

    我们在服务器管理中有以下模式-所有用户都有自己的用户,但部署完全由特殊部署用户执行,没有直接登录的可能性。我们在Capistrano2.x中使用了这个方法:default_run_options[:shell]="sudo-udeploybash"$capstagedeploy-suser=thisisme我知道Capistrano3.x有直接切换用户的方法:task:installdoonroles(:all)doas:deploydoexecute:whoamiendendend但是这段代码会填充所有任务,默认任务不会继承deploy用户。是否可以直接设置登录用户而无需将此代码拖到

  6. Android 10.0 设置默认launcher后安装另外launcher后默认Launcher失效的功能修复 - 2

    1.前言 在10.0的系统rom定制化开发中,在系统中有多个launcher的时候,会在开机进入launcher的时候弹窗launcher列表,让用户选择进入哪个launcher,这样显得特别的不方便所以产品开发中,要求用RoleManager的相关api来设置默认Launcher,但是在设置完默认Launcher以后,在安装一款Launcher的时候,默认Launcher就会失效,在系统设置的默认应用中Launcher选项就为空,点击home键的时候会弹出默认Launcher列表,让选择进入哪个默认Launcher.所以需要从安装Launcher的流程来分析相关的设置。来解决问题设置默认La

  7. ruby-on-rails - 在 Rails 中的何处设置跟踪(永久)cookie? - 2

    我正在尝试跟踪“匿名”用户的操作,并在他们注册后最终将其与他们的帐户相关联。我想我会通过设置永久cookie来做到这一点。我最好的选择是在ApplicationController中包含以下内容:classApplicationController这是正确的方法还是有更好的解决方案? 最佳答案 看起来不错,永久性cookie在未来(20年左右)过期,所以只要用户不手动删除它,您就应该能够跟踪他。我在很多地方都使用了这样的结构,而且效果很好。如果您包含要通过此操作加载的内容(典型的跟踪像素),您甚至可以让它在外部着陆页上运行。

  8. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

  9. Android Gradle 7.1+新版本依赖变化 - 2

    前一段时间由于工作需要把可爱的小雪狐舍弃了,找到了小蜜蜂。但是新版本的小蜜蜂出现了很多和旧版本不一样的位置。1.功能位置迁移,原来在工程build.gradle的buildscript和allprojects移动至setting.gradle并改名为pluginManagement和dependencyResolutionManagement。里面的东西依旧可以按照原来的copy过来。pluginManagement{repositories{gradlePluginPortal()google()mavenCentral()}}dependencyResolutionManagement{r

  10. ruby - Ruboto 的最佳教程(适用于 Android 的 ruby​​)? - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我几乎用完了Ruby,但现在想试试Ruboto,android上的ruby​​。谷歌未能给我足够的(几乎没有结果)。所以任何人都可以分享一些关于Ruboto的教程。

随机推荐