facebook第三方应用-威尼斯人2299

网络节点

facebook第三方应用开发

应用后台配置

说明

1.应用域名必须使用https 域名,

2.应用发布前,需要将访问用户添加到应用后台配置中,否则用户无法访问网站

3.应用发布前,应用可以获取所有添加的用户的部分数据

4.很多数据必须要向facebook后台提交审核权限,并且审核通过了,才可以使用相关权限,详情见官方文档

应用后台配置截图

1.可根据自己的情况选择 2.配置相关信息,因为公司内部使用,我选择的是个人,公司账号权限会更多,业务后期可拓展性强,可根据实际情况自行调整; 3.最初也填写了ip白名单,但是涉及nginx反向代理,以及内网ip,后续出现了一些问题,故取消了白名单设置,可根据实际情况自行测试,并调整 4.允许跨域,因为我的网站涉及内网和多个域名,可根据实际情况自行调整 5.填入网站涉及的所有的跳转url 6.我的是web网站,故选的是"www"类型,可根据实际情况自行修改 7.概括各部分作用和涉及内容

graphapi的使用(php-sdk)

1.注意

1) 截止到2019-06-16为止,php-sdk已经升级到了v3.3版本,注意在graphapi调用时,版本与下载的sdk版本号一致

2 poser安装

composer require facebook/graph-sdk # 前提是本机安装了composer,并设置了环境变量,若没有,百度自行安装就行了

3.demo案例

/* **************** 入口文件 ****************** */

# 获取回调地址

$helper = $fb->getredirectloginhelper();

$permissions = ['email','public_profile']; //获取的信息权限列表

$loginurl = $helper->getlogin;

header('location: '.$loginurl); // 重定向到回调url

/*echo '

'; */

?>

/* **************** 回调文件 ****************** */

fbtotalconfig = [

'app_id' => '应用id',

'app_secret' => '应用secret',

'app_version' => 'v3.2',// 跟安装的sdk版本一致,截止到20190616,已升级到v3.3

'header_url' => ' test /list.html',//跳转到指定页面

];

# 调用facebook-sdk

require_once './vendor/autoload.php'; // change path as needed

$fb = new facebook\facebook([

'app_id' => $fbtotalconfig['app_id'], // 应用id

'app_secret' => $fbtotalconfig['app_secret'], //应用secret

'default_graph_version' => fbtotalconfig['app_version'], // 跟安装的sdk版本一致,截止到20190616,已升级到v3.3

]);

// 在fb-callback.php页顶部加入session

if (!session_id()) {

session_start();

}

// 然后强制传值

$helper = $fb->getredirectloginhelper();

if (isset($_get['state'])) {

$helper->getpersistentdatahandler()->set('state', $_get['state']);

}

# 获取fb_access_token

try {

# 方案1:拼接https的重定向url

// $redirecturl = ' '.$_server['server_name'].$_server['request_uri'];

// $accesstoken = $helper->getaccesstoken($redirecturl);

# 方案2: 直接使用sdk内部获取的$_server数据(需做部分修改) [推荐使用]

$accesstoken = $helper->getaccesstoken();

} catch(facebook\exceptions\facebookresponseexception $e) {

// when graph returns an error

echo 'graph returned an error: ' . $e->getmessage();

exit;

} catch(facebook\exceptions\facebooksdkexception $e) {

// when validation fails or other local issues

echo 'facebook sdk returned an error: ' . $e->getmessage();

exit;

}

# 验证fb_access_token

if (! isset($accesstoken)) {

if ($helper->geterror()) {

header('http/1.0 401 unauthorized');

echo "error: " . $helper->geterror() . "\n";

echo "error code: " . $helper->geterrorcode() . "\n";

echo "error reason: " . $helper->geterrorreason() . "\n";

echo "error description: " . $helper->geterrordescription() . "\n";

} else {

header('http/1.0 400 bad request');

echo 'bad request';

}

exit;

}

// the oauth 2.0 client handler helps us manage access tokens

$oauth2client = $fb->getoauth2client();

// get the access token metadata from /debug_token

$tokenmetadata = $oauth2client->debugtoken($accesstoken);

// validation (these will throw facebooksdkexception's when they fail)

$tokenmetadata->validateappid($fbtotalconfig['app_id']); // 验证应用id,

// if you know the user id this access token belongs to, you can validate it here

//$tokenmetadata->validateuserid('123');

$tokenmetadata->validateexpiration();

if (! $accesstoken->islonglived()) {

// exchanges a short-lived access token for a long-lived one

try {

$accesstoken = $oauth2client->getlonglivedaccesstoken($accesstoken);

} catch (facebook\exceptions\facebooksdkexception $e) {

echo "

error getting long-lived access token: " . $e->getmessage() . "

\n\n";

exit;

}

echo '

long-lived

';

var_dump($accesstoken->getvalue());

}

$_session['fb_access_token'] = (string) $accesstoken;

# 设置自定义cookie

//setcookie('fb_access_token',(string) $accesstoken,0,'/','test ');

//setcookie('fb_access_token',(string) $accesstoken,0,'/','test2 ');

try {

# 获取退出登录的url

$logouturl = $helper->getlogout);

} catch(facebook\exceptions\facebookresponseexception $e) {

echo 'graph returned an error: ' . $e->getmessage();

exit;

} catch(facebook\exceptions\facebooksdkexception $e) {

echo 'facebook sdk returned an error: ' . $e->getmessage();

exit;

}

// 获取响应数据

try {

# 获取用户信息

$querystr = 'me/?fields=gender,birthday,name,email,id';

$response = $fb->get($querystr, $_session['fb_access_token']);

$user = $response->getgraphuser();

$fbusercode = $user['id'];

# 获取用户信息

$response = $fb->get('/me?fields=id,name', $_session['fb_access_token']);

$querystr = '1349433135167312?fields=name,global_brand_page_name,fan_count,category,id,verification_status,videos.since(1555806977).until(1556460756).limit(100){length,id,title,content_category,created_time,updated_time,live_status}';

$response = $fb->get($querystr, $_session['fb_access_token']);

$user = $response->getgraphuser();

echo 'name: ' . $user['name'];

# 获取主播信息 (指定时间范围的video列表 直播信息)

$pageid = '1349433135167312';

$endtime = null;

$currday = strtotime(date('y-m-d 00:00:00')); // 默认获取当天-前两个月的数据

$untiltime = !empty($endtime) && $endtime < $currday ? $endtime : $currday; //指定时间戳|当天凌晨

$sincetime = strtotime("-2 month", $untiltime); //2个月前的(指定日期|今天)凌晨

// $querystr = '1349433135167312?fields=name,global_brand_page_name,fan_count,category,id,verification_status,videos.since(1555806977).until(1556460756).limit(100){length,id,title,content_category,created_time,updated_time,live_status}'; //20190421-20190428

$querystr = $pageid .'?fields=name,global_brand_page_name,fan_count,category,id,verification_status,videos.since('.$sincetime.').until('.$untiltime.').limit(100){length,id,title,content_category,created_time,updated_time,live_status}'; // 获取指定时间内的8797威尼斯老品牌主页信息 video_id列表

$response = $fb->get($querystr,$_session['fb_access_token']);

$pageinfo = $response->getdecodedbody();

# 获取视频详情信息(视频简介 分析数据)

$videoid = '364442547498227';

$querystr = $videoid . '/?fields=id,length,live_status,picture,created_time,updated_time,title,content_category,video_insights{id,name,title,values}';

$response = $fb->get($querystr,$_session['fb_access_token']);

$videoinfo = $response->getdecodedbody();

} catch (\exception $ex) {

echo $ex->getmessage();

exit;

}

# 获取调试信息

/**

* 文件调试方法[利用php的ob缓存]

* @param string $key 打印标识

* @param mix $value 打印内容

* @param string $fileprefix 文件前缀名

*/

function fdebug($key, $value = '',$fileprefix = null) {

$fileprefix = $fileprefix ?? 'debug_file-';

$f = fopen($fileprefix . date('ymd') . '.log', 'a');

ob_start();

var_dump($value);

$str = ob_get_clean();

fwrite($f, $key . ":\n" . $str . "\n\n");

fclose($f);

}

//fdebug('responese_data_'.date('y-m-d h:i:s'),$response,'responese_data_');

//fdebug('responese_data_'.date('y-m-d h:i:s'),$response->getdecodedbody(),'responese_decodejson_');

//fdebug('session_data_'.date('y-m-d h:i:s'),$_session,'session_data');

//fdebug('cookie_data_'.date('y-m-d h:i:s'),$_cookie,'cookie_data');

header('location: '.$fbtotalconfig['header_url']); // 重定向到指定页面

?>

4.遇到的问题&威尼斯人2299的解决方案

1) 问题描述: 跳转第三方应用url时,弹出第三方应用回调url为无效地址错误

2)威尼斯人2299的解决方案

a) facebook第三方登录流程:

a)用户请求第三方应用回调url,先跳转到 facebook , facebook,

b)先验证回调url有效性,回调url验证通过后

c)验证用户登录状态,若未登录,则弹出登录窗口,用户填写账号密码登录,否则直接跳转第三方应用回调url

b) 原因: 问题就发生在验证回调url时,因为graph-sdk中获取回调url的方法是$_server信息拼接的,$redirecturl = $_server['request_scheme'] .'://'. $_server['server_port'] . $_server['host_name']; 然后再验证回调url是否对应$_server['server_addr']的ip; 首先会有两个问题,前面提到了我公司使用的nginx反向代理,1代2业务的架构,涉及到生产环境的内网外网问题,外网请求时https, 内网通信是http通信,且$_server中记录的是最终处理业务的机器信息,也就是说根据$_server拼接出来的信息是 $redirecturl = ' 80: test /callback.php';$_server['server_addr']='10.10.10.*' , 而不是正确的$redirectulr = ' 443: test /callback.php'; $_server['server_addr']='128.146.166.91', 而且上述的架构,每次业务请求时随机分配到机器上的,两次请求不一定对应同一个$_server['server_addr'],所以出现上述错误

c) 威尼斯人2299的解决方案&措施

打开文件路径: ./vendor/facebook/graph-sdk/src/facebook/url/facebookurldetectionhandler.php

添加下列方法:

/**

* 强制修改本地$_server

* 简介: 生产环境架构:一台nginx反向代理机器,两台业务机器;生产环境外网ip为128.146.166.91,nginx反向代理机器内网ip为10.10.10.200

*/

public function __construct()

{

# 生产环境ip

$productiparr = [

'outside'=>'128.146.166.91', //外网ip

'inside'=>[ //内网ip

'proxy'=>'10.10.10.200', // 代理机器内网ip

'task'=>['10.10.10.10','10.10.10.11'], // 业务机器

]

];

$this->fdebug('server_prefix_'.date('y-m-d h:i:s'),$_server,'server_prefix-');

'http' === $_server['request_scheme'] && $_server['request_scheme'] = 'https';

'80' === $_server['server_port'] && $_server['server_port'] = '443';

# 下列两行代码功能相同,均有效(亲测)

// in_array($_server['server_addr'],$productiparr['inside']['task']) && $_server['server_addr'] = $productiparr['outside'];

in_array($_server['server_addr'],$productiparr['inside']['task']) && $_server['server_addr'] = productiparr['inside']['proxy'];

$this->fdebug('server_suffix_'.date('y-m-d h:i:s'),$_server,'server_suffix-'); //打印调试信息

}

/**

* 文件调试方法 [涉及php的ob缓存]

* @param string $key 打印标识

* @param mix $value 打印内容

* @author dingjiang新增

*/

public function fdebug($key, $value = '',$fileprefix = null) {

$fileprefix = $fileprefix ?? 'debug_file-';

$f = fopen($fileprefix . date('ymd') . '.log', 'a');

ob_start();

var_dump($value);

$str = ob_get_clean();

fwrite($f, $key . ":\n" . $str . "\n\n");

fclose($f);

}

graphapi的使用(js-sdk) [未调试,仅供参考,详情见官方文档]

结语

1.以上是应用配置和php-sdk的demo,后续会上传完整的demo内容 2.还有puppeteer的基本使用和phpexcel的基本使用,后续也会更新

?android平台下facebook,google service, 新浪微博接入第三方应用sso授权教程 ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --?geolo( blog.csdn /geolo)

一、sso授权功能介绍

接入facebook,google service,新浪微博的第三方android应用可通过对应官方客户端快速完成oauth2.0授权。

二、sso授权优势

不需要重复输入用户名、密码,只需要一步操作,直接点击授权按钮即可完成授权,增强了操作简便性及帐号安全性。

三、sso授权流程示例

1.? 新浪微博授权流程实例 ? ?

2.? ??google service授权流程实例

? ? ?

? ? ? ?3.???facebook授权流程实例

? ? ? ? ? ? ?

四、新浪微博接入流程

?1.教程看sdk中的文档吧,csdn限制字数了,很多细节如果碰到问题可以问我

2.??????代码实例

认证成功之后会返回token数据,改token就是用户认证成功的凭证,可以使用该凭证获取用户的个人资料等数据。

五、facebook的sso接入流程

1. 开始部分可以看(部分内容: www blogs /tianjian/archive/2012/03/21/2410633.html)

2. ?获取用户的个人资料

注意:用户头像地址是固定的,传入id获取

六、google service 的sso接入流程

google的接入方式,是本篇文章重点教授的流程,安装google api 的文档进行会出现各式各样的问题,同时也不能成功接入上sso,为此作者完成此次接入已经花费不少时间,希望这边教程可以让更多需要接入google sso的同学少走弯路,更快速的开发出产品。

1.?????? 将google service 复制并导入到你的eclipse

1.1?? 打开你的android sdk manager,并下载goole play services

csdn越来越差了,编辑器不好用,发布的时候提示保存失败,删除字数发现图片不能显示,需要手工一个个上传,还不能word文档。。。吐槽不快。。。

2.?????? 代码实例

3.??????获取到token之后,就需要获取用户的个人资料。

以下是8797威尼斯老品牌官网的获取方式,但是早已经过时,并没有更新,因此误导了一大片小伙伴们。( developer.android /training/id-auth/authenticate.html)

注意:google 已经废弃了使用secret账号

七、教程总结

sso的认证很大程度上解决了认证的不安全性,同时也增强了用户体验,只要一键点击就可以认证成功,不需要再二次输入用户名和密码。为第三方应用的用户体验提到了更高层次。最后,需要注意新浪微博需要使用3.0版本以上才支持sso认证

?

文档下载地址: download.csdn /detail/geolo/5747475

前言 国内app出海,需要接入各种海外三方平台的分享,登录等。简单整理做一个备忘录。

对应的应用图标 对应的包名

平台应用包名facebookinstagramcom.instagram.android-messengercom.facebook.orcagooglegoogle playcom.android.vending-google console--firebase-tiktoktiktokcom.zhiliaoapp.musicallytwittertwittercom.twitter.android

简单介绍

facebook

instagrm(类似朋友圈) instagram(照片墙)是一款运行在移动端上的社交应用,以一种快速、美妙和有趣的方式将你随时抓拍下的图片彼此分享

messenger (类似微信聊天) [1] 是桌面窗口聊天客户端,允许客户进行聊天、接收通知并从电脑桌面上阅读新鲜事

facebook developer 平台 是facebook提供的一个快速接入旗下软件服务的管理后台

twitter 关于名字twitter的来历,twitter是一种鸟叫声,创始人认为鸟叫是短、频、快的,符合网站的内涵,因此选择了twitter为网站名称 twitter被形容为“互联网的短信服务”。

google 谷歌公司(google inc.)成立于1998年9月4日,由拉里·佩奇和谢尔盖·布林共同创建,被公认为全球最大的搜索引擎公司

google play google play又称play store(play 商店),前称为android market,是由google公司经营开发的数字化应用发布平台。

google console google play 的后台管理平台

firebase firebase是一家实时后端数据库创业公司,它能帮助开发者很快的写出web端和移动端的应用。自2014年10月google收购firebase以来,用户可以在更方便地使用firebase的同时,结合google的云服务。

tiktok tiktok是字节跳动旗下短视频社交平台,于2017年5月上线 [1] ,愿景是“激发创造,带来愉悦( inspire creativity and bring joy)”。

facebook 平台快捷入口

1.进入开发者平台 developers.facebook /apps/应用编号/dashboard/

2.不同应用类型支持添加的产品 developers.facebook /docs/development/create-an-app/app-dashboard/app-types

3.应用事件sdk developers.facebook /docs/app-events/getting-started-app-events-android

4.广告助手 developers.facebook /tools/app-ads-helper/

5.事件管理后台

facebook /events_manager2/list/app/应用编号/test_events?act=xxx

6.meta business 平台

business.facebook /overview/

文章威尼斯人2299的版权声明:除非注明,否则均为网络节点原创文章,转载或复制请以超链接形式并注明出处。

发表评论

快捷回复: 表情:
addoilapplausebadlaughbombcoffeefabulousfacepalmfecesfrownheyhainsidiouskeepfightingnoprobpigheadshockedsinistersmileslapsocialsweattolaughwatermelonwittywowyeahyellowdog
评论列表 (暂无评论,31人围观)

还没有评论,来说两句吧...

网站地图