ZeroyiQ:Unity 多平台原生SDK接入速览(一):微信开放平台
ZeroyiQ:Unity 多平台原生SDK接入速览(二):QQ互联
ZeroyiQ:Unity 多平台原生SDK接入速览(三):Facebook
ZeroyiQ:Unity 多平台原生SDK接入速览(五):微博
一、前言
离上次更新快过去一周了,不是我咕咕咕了,只是遇到了些状况。
Twitter 接入当前(2020-7-10)也是需要申请开发者账户,创建应用获取 key 和 secret。注意的是,据说 Twitter 开发者账户并不好申请,并且失败后该账户就无法重复申请了。然后我就以抱着碰碰运气的心态,结果申请秒过了,XD。(explore the APIs,地点为HK(挂了 HK 的梯子) ,+86 手机号,谷歌邮箱,不展示数据、不分析数据,理由说为了完成家庭作业)
正当进行到下一步——寻找官方提供的 SDK for Android 时,我死活找不到相关官方文档,最后发现了Twitter 18年 停止维护 SDK 了。废了些力气没有找到很好的替代方案,多方查找后,发现目前最正确的方法应该是自己去实现一套网页版的 Twitter 的登录。但是由于对于 Web 不是很了解以及时间因素,暂且还是优先使用 Twitter 官方停止维护的 SDK。通过 Twitter kit for Unity,验证了当前 SDK 依旧能够正常授权登录。因此还是选择了接入 Twitter kit for Android。
由于搞到了 Key 和 Secret,因此彻底走了遍整个流程。编译出 aar 包导入 Unity 项目,配置 AndroidManifest 和 Gradle,再 export 项目到 Android studio 中编译成 APK。后续也会出相关文章。
二、SDK接入
1. 配置依赖
build.gradle[Project]
repositories {jcenter()}
build.gradle[Module]
dependencies {implementation com.twitter.sdk.android:twitter:3.1.1}
2. 初始化
初始化 Twitter。
private boolean bIsInitialized;private TwitterAuthClient authClient;private void init() {if (!bIsInitialized) {bIsInitialized = true;String key = activity.getString(R.string.twitter_app_key);String secret = activity.getString(R.string.twitter_app_secret);UnityCallApi.unityLogInfo(TAG, "key: " + key + " secret: " + secret);TwitterConfig config = new TwitterConfig.Builder(activity).logger(new DefaultLogger(Log.DEBUG)).twitterAuthConfig(new TwitterAuthConfig(key, secret)).debug(false).build();Twitter.initialize(config);// 客户端认证,用来登录 authClient = new TwitterAuthClient();}}
三、登录
1. Twitter 原生按钮
1.a 添加按钮 布局 xml 中添加。
<com.twitter.sdk.android.core.identity.TwitterLoginButtonandroid:id="@+id/login_button"android:layout_width="wrap_content"android:layout_height="wrap_content" />
1.b 发起请求
loginButton = (TwitterLoginButton) findViewById(R.id.login_button);loginButton.setCallback(new Callback<TwitterSession>() {@Overridepublic void success(Result<TwitterSession> result) {// 成功回调 }@Overridepublic void failure(TwitterException exception) {// 失败回调 }
1.c 设置回调
@Override //这段代码非常重要,不加的话无法获取回调 protected void onActivityResult(int requestCode, int resultCode, Intent data) {// 传递回调 loginButton.onActivityResult(requestCode, resultCode, data);super.onActivityResult(requestCode, resultCode, data);}
2. 自定义按钮
2.a 发起请求
直接通过 authorize 方法触发登录请求。
//authClient 已经在 二.2 中初始化了 this.authClient.authorize(activity, new Callback<TwitterSession>() {public void success(Result<TwitterSession> result) {// 成功回调 TwitterSession data = (TwitterSession) result.data;UnityCallApi.unityLogInfo(TAG, "Login successful. " + data.getUserName() + " " + data.getUserId());UnityCallApi.sendLoginInfoToUnity(true, result.data.toString());}public void failure(TwitterException ex) {// 失败回调 UnityCallApi.unityLogError(TAG, "Login error. " + ex.getMessage());UnityCallApi.sendLoginInfoToUnity(false, "");}});
2.b 设置回调
@Override //这段代码非常重要,不加的话无法获取回调 protected void onActivityResult(int requestCode, int resultCode, Intent data) {// 传递回调 authClient.onActivityResult(requestCode, resultCode, data);super.onActivityResult(requestCode, resultCode, data);}
四、获取用户信息
TwitterSession 中就包含了用户基本信息 (username、id)
// 获取 sessionTwitterSession session = TwitterCore.getInstance().getSessionManager().getActiveSession();String userName = session.getUserName();String userId = session.getUserId();TwitterAuthToken authToken = session.getAuthToken();String token = authToken.token;String secret = authToken.secret;
五、分享
build.gradle[Module] 中添加依赖
dependencies {implementation com.twitter.sdk.android:twitter:3.1.1// 新增 implementation com.twitter.sdk.android:tweet-composer:3.1.1}
发起分享请求
public void shareImage(Bundle params) {TwitterSession session = TwitterCore.getInstance().getSessionManager().getActiveSession();if (session != null) {String imagePath = params.getString(PlatConstants.SHARE_IMAGE_PATH_STRING);String text = params.getString(PlatConstants.SHARE_TEXT_STRING);Intent intent = (new com.twitter.sdk.android.tweetcomposer.ComposerActivity.Builder(activity)).session(session).image("图片 Uri").text("分享内容").hashtags("#标签").createIntent();activity.startActivity(intent);}}
新建回调类,TwitterResultReceiver 继承 BroadcastReceiver
public class TwitterResultReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(TweetUploadService.UPLOAD_SUCCESS)){String text = "分享成功!";Toast.makeText(context,text,Toast.LENGTH_SHORT).show();}else {String text ="分享失败!";Toast.makeText(context,text,Toast.LENGTH_SHORT).show();}}}
AndroidManifest.xml 中添加 Receiver
<receiverandroid:name="替换为TwitterResultReceiver路径"android:exported="false"><intent-filter><action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_SUCCESS" /><action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_FAILURE" /><action android:name="com.twitter.sdk.android.tweetcomposer.TWEET_COMPOSE_CANCEL"/></intent-filter></receiver>
六、总结
当前虽然 Twitter 官方已经停止对 SDK 的维护了,但是登录和分享在目前(2020-7-13)都是能够正常使用的,因此可以先接入 SDK 进行使用,如果发生变化,直接对 SDK 进行修改。当然如果能专门封装一套网页版的实现,这应该才是正确的使用方式。请酌情选择方案。
七、引用
Twitter开发平台推特开发者账号如何申请成功?Twitter 停止维护SDKQQ MSDK Twitter 渠道接入文档Twitter kit for AndroidTwitter kit for UnityTwitter kit for Website
暂无评论数据