Facebook应用因Manage_pages功能问题遭自动拒审,求助解决方案
背景情况
我之前获取了manage_pages权限,但Facebook政策调整后该权限被弃用,且我的应用使用Facebook功能较少,导致应用被禁用。提交审核后收到以下反馈:

我的应用核心功能是通过客户的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

