ICode9

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

Unity 多平台原生SDK接入速览(四):Twitter

2020-07-21 11:03:14  阅读:343  来源: 互联网

标签:String Twitter Unity session 速览 data void SDK


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.TwitterLoginButton
     android: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>() {
   @Override
   public void success(Result<TwitterSession> result) {
       // 成功回调
   }

   @Override
   public 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)

// 获取 session
TwitterSession 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 {
    @Override
    public 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

<receiver
    android: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>

img

六、总结

当前虽然 Twitter 官方已经停止对 SDK 的维护了,但是登录和分享在目前(2020-7-13)都是能够正常使用的,因此可以先接入 SDK 进行使用,如果发生变化,直接对 SDK 进行修改。当然如果能专门封装一套网页版的实现,这应该才是正确的使用方式。请酌情选择方案。

七、引用

  1. Twitter开发平台
  2. 推特开发者账号如何申请成功?
  3. Twitter 停止维护SDK
  4. QQ MSDK Twitter 渠道接入文档
  5. Twitter kit for Android
  6. Twitter kit for Unity
  7. Twitter kit for Website

标签:String,Twitter,Unity,session,速览,data,void,SDK
来源: https://www.cnblogs.com/ZeroyiQ/p/13353839.html

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

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

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

ICode9版权所有