ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Unity 多平台原生SDK接入速览(五):微博

2020-07-21 11:02:01  阅读:325  来源: 互联网

标签:wbApi void Unity 微博 速览 new message public 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 one rror(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 one rror(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 说明

标签:wbApi,void,Unity,微博,速览,new,message,public,SDK
来源: https://www.cnblogs.com/ZeroyiQ/p/13353847.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有