ZeroyiQ:Unity 多平台原生SDK接入速览(一):微信开放平台
ZeroyiQ:Unity 多平台原生SDK接入速览(二):QQ互联
ZeroyiQ:Unity 多平台原生SDK接入速览(三):Facebook
ZeroyiQ:Unity 多平台原生SDK接入速览(四):Twitter
一、前言
官方平台申请开发者账号,简单填写就可以,当前(2020-7-17)个人开发者可以快速申请下来。创建对应的应用,获取对应的 AppKey。 要注意的是必须得填写 Android 包名和签名,才能正确的授权。填写位置在应用界面的【应用信息】-【基本信息】。
- 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);
}
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);
}
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);
}
六、总结
微博的SDK居然意外的封装的很好,使用起来也比较的简单省心。就是官方 SDK 仓库有点乱, 2019 SDK 文件夹下应该才算是最新的 SDK10.7.0,里面的 PDF 文档由于导出问题,代码部分显示有所缺失。所以最好还是以官方 Demo 为参考对象。