Unity 多平臺原生SDK接入速覽(五):微博
阿新 • • 發佈:2020-07-21
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 為參考物件。