You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Facebook应用因Manage_pages功能问题遭自动拒审,求助解决方案

Facebook应用审核与功能适配问题

背景情况

我之前获取了manage_pages权限,但Facebook政策调整后该权限被弃用,且我的应用使用Facebook功能较少,导致应用被禁用。提交审核后收到以下反馈:
App review 1
App review 2

我的应用核心功能是通过客户的Facebook页面收款,此前依赖manage_pages权限。现在点击连接按钮时,页面显示“应用处于开发模式”。陷入死循环:功能无法正常运行就没法提供演示视频,而没有演示视频又过不了审核,现在重新提交审核还会被自动拒审,急需解决思路。

相关代码

Facebook控制器代码

class FacebookController < ApplicationController
  skip_before_action :verify_authenticity_token
  skip_before_action :authorize

  def connect
    # get array of facebook pages added
    page_ids = params[:tabs_added].keys
    # create or update connection for each facebook page added
    page_ids.each do |page_id|
      page = FacebookPage.where(page_id: page_id).first_or_initialize
      page.update!(slug_id: params[:slug_id], form_type: params[:form_type])
    end

    head :created
  end

  def show
    request = parse_signed_request(params[:signed_request]).try(:[], 'page')
    facebook_page = FacebookPage.find_by(page_id: request.try(:[], 'id'))
    facebook_admin = request.try(:[], 'admin')
    if facebook_page
      redirect_to contribution_form_url(
        subdomain: facebook_page.account_type,
        id: facebook_page.slug.name,
        form_type: facebook_page.form_type,
        iframe: true,
        facebook: true,
        facebook_admin: facebook_admin,
        facebook_page: facebook_page
      )
    else
      render nothing: true
    end
  end

  def update
    facebook_page = FacebookPage.find(params[:id])
    slug = Slug.find_by!(name: page_params[:form_slug], account_type: facebook_page.account_type)
    if facebook_page.update!(slug: slug, form_type: page_params[:form_type])
      redirect_to contribution_form_url(
        subdomain: facebook_page.account_type,
        id: facebook_page.slug.name,
        form_type: facebook_page.form_type,
        iframe: true,
        facebook: true,
        facebook_admin: true,
        facebook_page: facebook_page
      )
    end
  end

  private
    def parse_signed_request(signed_request)
      # We only care about the data after the '.'
      payload = signed_request.split('.')[1]
      # Facebook gives us a base64URL encoded string.
      # Ruby only supports base64 out of the box, so we have to add padding to make it work
      payload += '=' * (4 - payload.length.modulo(4))

      decoded_json = Base64.decode64(payload)
      JSON.parse(decoded_json)
    end

    def page_params
      params.require(:facebook_page).permit(:form_type, :form_slug)
    end
end

Facebook标签页打开脚本

<script>

  function move_to_top( value )
  {
    $(".fb_dialog").each(function(index) {
        if($(this).css("top")!='-10000px') {
            $(this).css("top", value + 'px' );
        }
    });
    setTimeout( ('move_to_top("'+value+'");'), 1250);
  }  

  window.addToFacebook = function() {
    // make sure logged in as user; not page
    FB.login(function(loginResponse) {
      // if they are correctly logged in as user
      if (loginResponse.authResponse) {
        // popup modal to add form to page
        FB.ui({
          method: 'pagetab',
          display: 'popup'
        }, function(response) {
          // if tabs were added, make the connection
          if (Object.keys(response.tabs_added).length > 0) {
            console.log("inside")
            response.form_type = $('[name=form_type]:checked').val().slice(0,1);
            response.slug_id = '<%= Slug.find_by(name: slug, account_type: candidate.account_type).try(:id) || candidate.account_slug.id %>';
            $.post('/facebook/connect', response);

            $.magnificPopup.open({
              items: {
                src: '<%=j render "form_settings/facebook_success" %>',
                type: 'inline'
              }
            });

          }
        });
        $(".fbProfileBrowserResult").ready( function(){
          t = setTimeout ( ('move_to_top("'+50+'")'), 1250 );
        });
      }
    });
  };
</script>

<p><%= link_to 'Connect with Facebook', '#', onclick: 'addToFacebook()', class: 'button' %></p>

解决思路

  • 权限适配:替换manage_pages权限
    Facebook弃用manage_pages后,需改用新版权限pages_show_list(获取页面列表)和pages_manage_metadata(管理页面元数据/标签页),这两个是当前添加页面标签页所需的核心权限。先在应用后台的“权限与功能”中添加这两个权限,确保申请理由明确对应“为商家添加收款标签页”的场景。

  • 打破开发模式死循环:添加测试用户/测试页面
    在Facebook应用后台的“测试用户”板块创建测试用户,并为测试用户分配测试Facebook页面。将测试用户添加为应用的管理员/测试员,此时测试用户访问应用时不会触发“开发模式”限制,可正常操作录制演示视频。

  • 优化审核提交材料
    录制演示视频时,完整展示“用户登录Facebook→选择页面→添加收款标签页→完成收款流程”的全链路,重点突出应用仅用于页面收款的核心用途,避免出现与权限无关的功能。撰写详细的审核说明:明确说明原manage_pages权限已替换为新版权限,解释应用的核心价值(帮助商家通过Facebook页面便捷收款),并标注演示视频中的关键操作节点。

  • 排查自动拒审原因
    检查应用后台的“应用状态”和“审核记录”,查看自动拒审的具体提示(通常是权限申请理由不清晰、功能与权限不匹配)。如果没有明确提示,可尝试先移除所有非必要权限,仅保留pages_show_list、pages_manage_metadata以及收款相关的基础权限(如public_profile),再重新提交审核。

  • 代码适配调整
    检查当前FB.login调用是否请求了新版权限,需在FB.login的scope参数中添加pages_show_list,pages_manage_metadata,确保用户授权时获取正确的权限:

    FB.login(function(loginResponse) {
      // ...逻辑代码
    }, { scope: 'pages_show_list,pages_manage_metadata' });
    

    同时验证signed_request解析逻辑是否兼容新版权限返回的数据结构,确保页面信息能正常获取。

内容的提问来源于stack exchange,提问作者shashank barman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:27:13