Blog

Blog

PHODAL

大前端 Android 开发日记九:微博分享

早期在评估的时候,使用的是第三方 SDK —— shareSDK。可是,这个第三方 SDK 需要注册相应的账号,并且在后台,我们可以看到对应的分享数据。这也就意味着,它会收集一些用户信息,考虑到在这个因素,只好自己编写相应的对接逻辑。

因此,在这一天里,主要做的是微博的分享功能。

短信分享返回

在最近设计的时候,在完成短信分享之后,我需要知道它是通知短信分享出去的。就会用到 onActivityResult 来在 Activity 之间数据交流:

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

    if (requestCode == ShareUtil.SMS_REQUEST_CODE) {
        bottomSheetDialog.dismiss();
    }
}

这里的 requestCode 提供给 onActivityResult,是以便确认返回的数据是从哪个 Activity 返回的。这个 requestCode 和 startActivityForResult 中的 requestCode 相对应。即,如下的短信分享逻辑:

context.startActivityForResult(mIntent, ShareUtil.SMS_REQUEST_CODE);

微博分享接入

接下来的就是微博分享了,按照官方的文档接入 SDK。配置权限

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

对应的 filter

<intent-filter>
    <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
    <action android:name="android.intent.action.MAIN"/>
</intent-filter>

在项目的 build.gradle 中添加依赖源

allprojects {
    repositories {
        jcenter()
        google()
        maven { url "https://dl.bintray.com/thelasterstar/maven/" }
    }
}

在应用的 build.gradle 添加对应的依赖

implementation 'com.sina.weibo.sdk:core:4.1.5:openDefaultRelease@aar'

然后创建一个实现 WbShareCallback 对象的 Activity:

@SuppressLint("Registered")
public class ShareableActivity implements WbShareCallback {
    private WbShareHandler shareHandler;
    private BottomSheetDialog bottomSheetDialog;
    private IWXAPI api;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        WbSdk.install(this, new AuthInfo(this, ShareUtil.weiboId, "http://www.phodal.com/", ""));

        shareHandler = new WbShareHandler(this);
        shareHandler.registerApp();
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        shareHandler.doResultIntent(intent, this);
    }

    @Override
    public void onWbShareSuccess() {
        bottomSheetDialog.dismiss();
    }

    @Override
    public void onWbShareCancel() {
        bottomSheetDialog.dismiss();
    }

    @Override
    public void onWbShareFail() {
        bottomSheetDialog.dismiss();
    }

    public void showShareDialog(InformationDetailModel information) {
        bottomSheetDialog = new BottomSheetDialog(ShareableActivity.this);
        View dialogView = LayoutInflater.from(ShareableActivity.this).inflate(R.layout.share_dialog, null);

        dialogView.findViewById(R.id.weibo_content).setOnClickListener(view -> {
            weiboShare(information);
        });

        bottomSheetDialog.setContentView(dialogView);
        bottomSheetDialog.show();
    }
    private void weiboShare(InformationDetailModel information) {
        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
        weiboMessage.mediaObject = ShareUtil.buildWebPageObject(this, information);
        shareHandler.shareMessage(weiboMessage, false);
    }
}

差不多就可以了。

关于我

Github: @phodal     微博:@phodal     知乎:@phodal    

微信公众号(Phodal)

围观我的Github Idea墙, 也许,你会遇到心仪的项目

QQ技术交流群: 321689806

新书《全栈应用开发:精益实践》

这不是一本深入前端、后台、运维、设计、分析等各个领域的书籍。本书以实践的方式,将这一系列的领域及理论知识结合到一起,来帮助读者构建全栈Web 开发的知识体系,并辅以精益及敏捷的思想,来一步步开发Web 应用:从创建一个UI 原型到编写出静态的前端页面;从静态的前端页面到带后台的应用,并部署应用;从Web 后台开发API 到开发移动Web 应用。在这个过程中,我们还将介绍一些相辅相成的步骤:使用构建系统来加速Web 应用的开发;为应用添加数据分析工具来改进产品;使用分析工具来改善应用的性能;通过自动化部署来加快上线流程;从而帮助读者开发出一个真正可用的全栈 Web 应用。同时,我们也将帮助读者把这些步骤应用到现有的系统上,改进现有系统的开发流程。

comment

Feeds

RSS / Atom

最近文章

关于作者

Phodal Huang

Developer, Consultant, Writer, Designer

ThoughtWorks 高级咨询师

工程师 / 咨询师 / 作家 / 设计学徒

开源深度爱好者

出版有《前端架构:从入门到微前端》、《自己动手设计物联网》、《全栈应用开发:精益实践》

联系我: h@phodal.com

微信公众号: 与我沟通

标签