zoukankan      html  css  js  c++  java
  • Unity 多平台原生SDK接入速览(五):微博

    ZeroyiQ:Unity 多平台原生SDK接入速览(一):微信开放平台

    ZeroyiQ:Unity 多平台原生SDK接入速览(二):QQ互联

    ZeroyiQ:Unity 多平台原生SDK接入速览(三):Facebook

    ZeroyiQ:Unity 多平台原生SDK接入速览(四):Twitter

    一、前言

    官方平台申请开发者账号,简单填写就可以,当前(2020-7-17)个人开发者可以快速申请下来。创建对应的应用,获取对应的 AppKey。 要注意的是必须得填写 Android 包名和签名,才能正确的授权。填写位置在应用界面的【应用信息】-【基本信息】。

    img

    • Android 包名获取方式:在工程主 modules 的 build.gradle 文件(apply plugin 值为 'com.android.application') 中 applicationId 的值。
    • Android 签名获取方式:SDK 项目中集成工具 包含了获取签名的应用 apk,可以通过包名获取应用的签名。至于签名的知识可以看看这个博客

    二、SDK 接入

    1. 配置依赖

    build.gradle[Project]

    allprojects {
        repositories {
            maven { url "https://dl.bintray.com/thelasterstar/maven/" }
        }
    }
    

    build.gradle[Module]

    android {
        defaultConfig {
            ndk {
                abiFilters 'armeabi' //, 'armeabi-v7a','arm64-v8a'
            }
        }
    }
    
    dependencies {
        implementation 'com.sina.weibo.sdk:core:10.7.0:openDefaultRelease@aar'
    }
    

    2. 添加权限

    AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    3. 初始化

    public static final String WB_APP_KEY = "应用 AppKey";  // 应用 APPKey
    public static final String WB_REDIRECT_RUL = "http://www.sina.com"; // 必须和图中后台设置的授权一致
    public static final String WB_USER_SCOPE = "email,direct_messages_read,direct_messages_write,"; // 作用域
    
    private void init() {
        AuthInfo authInfo = new AuthInfo(activity, WB_APP_KEY, WB_REDIRECT_RUL, WB_USER_SCOPE);
        wbApi = WBAPIFactory.createWBAPI(activity);
        wbApi.registerApp(activity, authInfo);
    }
    

    三 登录

    发起登录授权请求,可以选择只通过网页,或者客户端授权,也可以让 SDK 自动选择授权方式。

    private void startAuth(){
        // 自动选择授权(网页 or 客户端)
        wbApi.authorize(new WbAuthListener() {
                @Override
                public void onComplete(Oauth2AccessToken oauth2AccessToken) {
                    UnityCallApi.unityLogInfo(TAG, "Login successful.");
                    AccessTokenHelper.writeAccessToken(activity, oauth2AccessToken);  // 保存 TOKEN
                    UnityCallApi.sendLoginInfoToUnity(true, String.format("id:%s username: %s ", oauth2AccessToken.getUid(), oauth2AccessToken.getScreenName()));
                }
    
                @Override
                public void onError(UiError uiError) {
                    UnityCallApi.unityLogError(TAG, "Login error." + uiError.errorCode + uiError.errorCode);
                    UnityCallApi.sendLoginInfoToUnity(false, "");
                }
    
                @Override
                public void onCancel() {
                    UnityCallApi.unityLogInfo(TAG, "Login cancel.");
                }
        });
        // 通过客户端授权
        //wbApi.authorizeClient(new WbAuthListener()){
        //     ...
        // }
    
        // 通过网页授权
        // wbApi.authorizeWeb(new WbAuthListener()){
        //     ...
        // }
    }
    

    设置授权回调,重写 Activity 的 OnActivityResult。

    @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (wbApi != null) {
            wbApi.authorizeCallback(requestCode, resultCode, data);
        }
        super.onActivityResult(requestCode, resultCode, data);
     }
    

    四、获取用户信息

    在授权登录的时候返回信息中已经包含了用户最基本的,Uid 和ScreenName。

    如果还需要更详细的信息,需要自己申请 通过官方SDK维护人员验证,得知目前 API(10.7.0)已经不再直接提供获取用户信息的接口(UsersApi.Show)了,需要自己根据文档发送 GET 请求。

    五、分享

    实现分享回调接口

    private static class ShareCallback implements WbShareCallback {
    
            @Override
            public void onComplete() {
                UnityCallApi.unityLogInfo(TAG, "shared successful.");
            }
    
            @Override
            public void onError(UiError uiError) {
                UnityCallApi.unityLogError(TAG, String.format("shared error. code:%s msg:%s", uiError.errorCode, uiError.errorMessage));
            }
    
            @Override
            public void onCancel() {
                UnityCallApi.unityLogInfo(TAG, "shared cancel.");
            }
        }
    

    设置分享回调,重写 Activity 的 OnActivityResult。

    @Override
     protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (wbApi != null) {
            wbApi.authorizeCallback(requestCode, resultCode, data);
            // 分享回调
            wbApi.doResultIntent(data, new ShareCallback());
        }
        super.onActivityResult(requestCode, resultCode, data);
     }
    

    1.文字

    public void shareText(Bundle params) {
        TextObject textObject = new TextObject();
        textObject.text = "分享文字内容";
    
        WeiboMultiMessage message = new WeiboMultiMessage();
        message.textObject = textObject;
        boolean isOnlyClient = false; // 是否只允许客户端分享,不使用网页分享
        wbApi.shareMessage(message, isOnlyClient);
    }
    

    img

    2.图片

    public void shareImage(Bundle params) {
        ImageObject imageObject = new ImageObject();
        Bitmap data = // 需要分享的图片
        imageObject.setImageData(data);
    
        WeiboMultiMessage message = new WeiboMultiMessage();
        message.imageObject = imageObject;
        wbApi.shareMessage(message, false);
    }
    

    img

    3.网页

    public void shareWebLink(Bundle params) {
        WebpageObject webpageObject = new WebpageObject();
        webpageObject.identify = UUID.randomUUID().toString();
        webpageObject.title = "标题";
        webpageObject.description = "描述";
        webpageObject.actionUrl = "网页链接";
        webpageObject.defaultText = "分享网页";
    
        WeiboMultiMessage message = new WeiboMultiMessage();
        message.mediaObject = webpageObject;
        wbApi.shareMessage(message, false);
    }
    

    img

    六、总结

    微博的SDK居然意外的封装的很好,使用起来也比较的简单省心。就是官方 SDK 仓库有点乱, 2019 SDK 文件夹下应该才算是最新的 SDK10.7.0,里面的 PDF 文档由于导出问题,代码部分显示有所缺失。所以最好还是以官方 Demo 为参考对象。

    七、引用

    1. 微博开放平台
    2. 官方 SDK 仓库
    3. 微博 API
    4. 官方文档 Scope 说明
  • 相关阅读:
    sql server的for xml path与变通的行转列
    nginx产生【413 request entity too large】错误的原因与解决方法
    spring的15个经典面试题
    数据库死锁预防规范
    服务端高并发分布式架构的演进
    后端接口统一返回响应对象
    数据库的dml、ddl和dcl的概念
    [na]ip routing&no ip routing
    [na]一站式学习wireshark
    [na]tcpdump参数应用参考
  • 原文地址:https://www.cnblogs.com/ZeroyiQ/p/13353847.html
Copyright © 2011-2022 走看看