05
2017
10

Android新浪微博SDK分享功能接入

集成前准备

1. 申请APP_KEY

第三方需要接入微博SDK必须在微博开放平台上对应用进行注册,并获取APP_KEY,添加
应用的授权回调页面(Redirect URI)

2. 注册应用程序的包名和签名

您需要在微博开放平台上注册应用程序的包名和签名后,才能正确进行授权。
请注意:包名和签名未注册,或者签名注册不正确,都会导致无法授权。
应用程序包名:指AndroidManifest.xml文件中,package标签所代表的内容。
应用程序签名:该签名是通过官方提供的签名工具生成的MD5值。
详情请查看:微博Android平台SDK文档V4.0pdf 中:如何使用签名工具获取您应用的签名?

注:这个pdf链接不知道是我浏览器的原因还是怎么回事,一直是打不开的,但是这个文档在文章末尾提到的官方demo中,是有这个文档的,大家可以将demo下载下来,然后就可以看里面的 Android平台SDK文档V4.0pdf。

3. 集成sdk

1:Android Studio接入 在你工程的主模块下面修改build.gradle文件,添加微博sdk的依赖

allprojects {
    repositories {
        jcenter()
        mavenCentral()
        maven { url "https://dl.bintray.com/thelasterstar/maven/" }
    }
}
compile 'com.sina.weibo.sdk:core:4.1.3:openDefaultRelease@aar'

注:添加完依赖后需要点击 Sync Project with Gradle Files 按钮进行下载依赖包

2:Manifest文件中添加以下permission应用权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>

应用接入

1. 替换成自己应用的 APP_KEY 等参数

定义Constants接口,并将Constants类中的各种参数替换成自己应用的参数,请仔细阅读代码注释。

public interface Constants {
    /** 当前 DEMO 应用的 APP_KEY,第三方应用应该使用自己的 APP_KEY 替换该 APP_KEY */
    public static final String APP_KEY = "2045436852";

    /** * 当前 DEMO 应用的回调页,第三方应用可以使用自己的回调页。 * 建议使用默认回调页:https://api.weibo.com/oauth2/default.html */
    public static final String REDIRECT_URL = "http://www.sina.com";

    /** * WeiboSDKDemo 应用对应的权限,第三方开发者一般不需要这么多,可直接设置成空即可。 * 详情请查看 Demo 中对应的注释。 */
    public static final String SCOPE = 
            "email,direct_messages_read,direct_messages_write,"
            + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
            + "follow_app_official_microblog," + "invitation_write";
}

2. Activity中接入分享

public class ShareActivity extends AppCompatActivity implements View.OnLongClickListener,WbShareCallback {//实现WbAuthListener接口
    public static final String TAG = "Chunna=ShareActivity";
    private ImageView ivQRCode;

    WbShareHandler shareHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_share);
        initView();

        initWeiBo();
    }

    private void initView() {
        ivQRCode = (ImageView)findViewById(R.id.iv_share_QRcode);
        ivQRCode.setOnLongClickListener(this);
    }

    private void initWeiBo() {
        WbSdk.install(this,new AuthInfo(this, WebConstants.APP_KEY,WebConstants.REDIRECT_URL, WebConstants.SCOPE));//创建微博API接口类对象
        shareHandler = new WbShareHandler(this);
        shareHandler.registerApp();
    }

  /** * 用户点击分享按钮,唤起微博客户端进行分享。 */
    @Override
    public boolean onLongClick(View view) {
        //第一个参数是判断分享内容中是否有文本,第一个参数是判断分享内容中是否有图片
        sendMessageToWb(false,true);
        return true;
    }

    @Override
    public void onWbShareSuccess() {
        Log.d(TAG,"分享成功");
    }

    @Override
    public void onWbShareCancel() {
        Log.d(TAG,"分享取消");
    }

    @Override
    public void onWbShareFail() {
        Log.d(TAG,"分享失败");
    }

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

    /** * 第三方应用发送请求消息到微博,唤起微博分享界面。 */
    private void sendMessageToWb(boolean hasText, boolean hasImage) {
        sendMultiMessage(hasText, hasImage);
    }

    /** * 第三方应用发送请求消息到微博,唤起微博分享界面。 */
    private void sendMultiMessage(boolean hasText, boolean hasImage) {

        WeiboMultiMessage weiboMessage = new WeiboMultiMessage();
        if (hasText) {
            weiboMessage.textObject = getTextObj();
        }
        if (hasImage) {
            weiboMessage.imageObject = getImageObj(this);
        }
        shareHandler.shareMessage(weiboMessage, false);
    }

    /** * 创建文本消息对象。 * @return 文本消息对象。 */
    private TextObject getTextObj() {
        TextObject textObject = new TextObject();
        textObject.text = "这里是分享的内容";
        textObject.title = "xxxx";
        textObject.actionUrl = "http://www.baidu.com";
        return textObject;
    }

    /** * 创建图片消息对象。 * @return 图片消息对象。 */
    private ImageObject getImageObj(Context context) {
        ImageObject imageObject = new ImageObject();
        Bitmap  bitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_share_qrcode);
        imageObject.setImageObject(bitmap);
        return imageObject;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
    <ImageView  android:id="@+id/iv_share_QRcode" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:background="@mipmap/ic_launcher"/>
</RelativeLayout>

文章参考:新浪微博开发文档
文章参考:新浪微博github地址中的demo

上一篇:Web应用程序的最佳实践 下一篇:Linux电源管理(三)电源管理接口