Facebook、Twitter分享功能实现,采用官方SDK方式【Android】

本篇文章主要记录自己采用官方SDK方式实现Facebook、Twitter的分享功能,Facebook实现起来还是很简单的,主要是Twitter的实现走了一些弯路,在此做一个简单的记录。

官方文档的链接:

Facebook

  1. https://developers.facebook.com/docs/sharing/android

Twitter

  1. 项目配置:https://dev.twitter.com/twitterkit/android/installation
  2. 发推文:https://dev.twitter.com/twitterkit/android/compose-tweets

Facebook分享

Facebook的官方文档还是很详细的,只要到开发者控制台创建应用,按照步骤一步一步就可以配置好,还是很简单的,就不赘述了。

这里简单将项目代码中的几个部分作简要总结:

  1. 添加项目依赖
compile 'com.facebook.android:facebook-android-sdk:[4,5)'  //facebook分享
  1. 将facebook_app_id(开发者控制台创建应用即可获得,应用编号就是facebook_app_id)配置到values/string.xml
 <!--替换自己的key-->
    <string name="facebook_app_id">1964233977152758</string>
  1. 注册清单文件
<!--FACEBOOK分享-->
        <meta-data
            android:name="com.facebook.sdk.ApplicationId"
            android:value="@string/facebook_app_id" />
        //FacebookContentProvider后的数字替换成自己的facebook_app_id
        <provider
            android:name="com.facebook.FacebookContentProvider"
            android:authorities="com.facebook.app.FacebookContentProvider1964233977152758"
            android:exported="true" />
        //浏览器分享卡片,未安装客户端时弹出
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data android:scheme="fb1964233977152758" />//fb后的数字替换成自己的facebook_app_id
            </intent-filter>
        </activity>
  1. activity中初始化以及添加分享事件
/**
     * facebook配置, 在oncreate()方法中调用
     */
    private void initFacebook() {
        //抽取成员变量
        callbackManager = CallbackManager.Factory.create();
        shareDialog = new ShareDialog(this);
        // this part is optional
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {

            @Override
            public void onSuccess(Sharer.Result result) {
                //分享成功的回调,在这里做一些自己的逻辑处理
            }

            @Override
            public void onCancel() {

            }

            @Override
            public void onError(FacebookException error) {

            }
        });
    }
/**
     * 这是一个按钮的点击事件,分享到facebook
     * 若未安装facebook客户端,则会跳转到浏览器
     *
     * @param view
     */
    public void shareToFacebook(View view) {
        //这里分享一个链接,更多分享配置参考官方介绍:https://developers.facebook.com/docs/sharing/android
        if (ShareDialog.canShow(ShareLinkContent.class)) {
            ShareLinkContent linkContent = new ShareLinkContent.Builder()
                    .setContentUrl(Uri.parse("https://developers.facebook.com"))
                    .build();
            shareDialog.show(linkContent);
        }
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //facebook的界面回调
        callbackManager.onActivityResult(requestCode, resultCode, data);
    }

完整代码已上传至GitHub:https://github.com/and2long/ShareDemo

Twitter分享

相对于Facebook,完成Twitter的分享功能还是花费了不少时间的,在网上搜索Twitter分享功能实现,搜出来的文章都是说用fabric,相关的配置一大堆,看着就头疼(顿时懒癌症就犯了)。
最后经过仔细查阅官方文档,发现并不需要fabric即可实现。

这里将实现步骤做简要总结:

  1. 在Twitter开发者控制台创建应用,获得API Key和API Secret
createApp.png
  1. 添加项目依赖
compile 'com.twitter.sdk.android:twitter:3.0.0'             //twitter分享
compile 'com.twitter.sdk.android:tweet-composer:3.0.0'      //twitter分享,发布推文
  1. 将API Key和API Secret配置到values/string.xml
<!--替换自己的key-->
    <string name="com.twitter.sdk.android.CONSUMER_KEY">jFRczHoA7jym7X9DYOG6IMQab</string>
    <string name="com.twitter.sdk.android.CONSUMER_SECRET">X3hYoUjklg5c3QpLi6MPx487nmGSGjlMm77kTAWMeRJPt9Xmlu</string>
  1. 在application中初始化
public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        //初始化Twitter
        Twitter.initialize(this);
    }
}
  1. 添加分享事件
/**
     * 分享到twitter
     * 若未安装twitter客户端,则会跳转到浏览器
     *
     * @param view
     */
    public void shareToTwitter(View view) {
        //这里分享一个链接,更多分享配置参考官方介绍:https://dev.twitter.com/twitterkit/android/compose-tweets
        try {
            TweetComposer.Builder builder = new TweetComposer.Builder(MainActivity.this)
                    .url(new URL("https://www.google.com/"));
            builder.show();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
  1. 分享结果回调,这一点有所不同,Twitter的分享回调是用广播的方式接受的。所以需要自己写一个广播处理回调事件,并注册到清单文件。
public class MyResultReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if (TweetUploadService.UPLOAD_SUCCESS.equals(intent.getAction())) {
            // success Twitter分享成功的回调
            final Long tweetId = intent.getExtras().getLong(TweetUploadService.EXTRA_TWEET_ID);
        } else {
            // failure
            final Intent retryIntent = intent.getExtras().getParcelable(TweetUploadService.EXTRA_RETRY_INTENT);
        }
    }
}
<!--Twitter分享的接受广播-->
        <receiver
            android:name=".MyResultReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_SUCCESS" />
                <action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_FAILURE" />
            </intent-filter>

到这里,Twitter的分享功能就完成了。

有小伙伴说分享后的回调么有走,还是再检查检查自己的代码吧,这里直接贴出官方的文档介绍以供参考:

twitter.png

完整代码已上传到GitHub:https://github.com/and2long/ShareDemo

这篇文章中的分享功能都是采用的标准分享方式,即点击分享按钮 --> 弹出分享对话框 --> 编辑分享内容 --> 确定分享

但是有时候项目中的需求不是这样的,比如:不弹出分享对话框,点击分享按钮便直接将需要分享的内容直接分享出去。

这个需求官方文档貌似没有给出详细的实现方式,由于篇幅原因,这里就不再写出了,如果有小伙伴有同样的需求,可私信我。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,442评论 25 707
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,396评论 2 45
  • 在说明Mixin之前,有必要提一下模板方法模式。 模板方法模式定义了一个算法步骤,并允许子类为一个或者多个步>骤提...
    MontyOak阅读 2,808评论 0 0
  • 【养生歌】常吃一点蒜,消毒又保健;多食一点醋,不用上药铺;多吃一点姜,益寿保安康;乱吃一顿伤,会吃千顿香;干净一身...
    勤录阅读 208评论 0 2
  • 行装准备:雪地靴,登山厚袜,羽绒裤,羽绒服(内外两件),手套,帽子,围巾,口罩 一早
    梧桐雨_yunzhi阅读 84评论 0 0