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 说明
  • 相关阅读:
    Leetcode 538. Convert BST to Greater Tree
    Leetcode 530. Minimum Absolute Difference in BST
    Leetcode 501. Find Mode in Binary Search Tree
    Leetcode 437. Path Sum III
    Leetcode 404. Sum of Left Leaves
    Leetcode 257. Binary Tree Paths
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
    Leetcode 226. Invert Binary Tree
    Leetcode 112. Path Sum
    Leetcode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/ZeroyiQ/p/13353847.html
Copyright © 2011-2022 走看看