Unity Twitter登录接入

相关链接

官网:Twitter -- 聚焦当下 / Twitter

开发者界面:Use Cases, Tutorials, & Documentation | Twitter Developer Platform

官方文档:Twitter Developer Platform overview | Docs | Twitter Developer Platform

Dashboard:Twitter Developers

接入流程

游戏设置

1、创建开发者账号,需要审核。这块需要注意的是,不同的开发者用途选择的内容不一样,我是用来做 探索API,填写了200字符的说明。提交完成之后等待审核,具体审核时间不知道,我的审核时间大概是12个小时,被拒了,试了三个账号,都被拒了,最后让同事注册了一个公司的。

2、保存SDK的一些相关信息,如下图红框所示。

3、以前有各种针对于android,ios,unity等的sdk,但不知道从哪一年开始就停止了维护,所以现在选择用网页来实现第三方登录。unity可以通过Application.openURL来实现,我这里选择了使用uniwebview插件来实现网页登录,两者区别有一些,但流程是一样的。

登录接入

第一步:请求令牌

官方文档:Log in with Twitter | Docs | Twitter Developer Platform

介绍:

这一步主要是在客户端发送一个post请求,来获取一个令牌,方便后续的用户登录确认。麻烦的地方在于要在客户端生成一个签名,官方也有专门的介绍文档(Creating a signature | Docs | Twitter Developer Platform)。

相关代码:

    /// <summary>/// Encodes the specified text./// </summary>/// <param name="text">The text.</param>/// <returns>The encoded text.</returns>public static string UrlEncode(string text){if (string.IsNullOrEmpty(text))return "";return string.Concat(Encoding.UTF8.GetBytes(text).Select(x => x < 0x80 && "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~".Contains(((char)x).ToString()) ? ((char)x).ToString() : ('%' + x.ToString("X2"))));}
    /// <summary>/// 获取签名/// </summary>/// <returns></returns>public static string GetSignature(Uri url, IEnumerable<KeyValuePair<string, string>> prm){var key = Encoding.ASCII.GetBytes(string.Format("{0}&{1}", UrlEncode(APPKeySecret),UrlEncode(AccessTokenSecret)));string prmstr = string.Join("&", prm.Select(x => new KeyValuePair<string, string>(UrlEncode(x.Key), UrlEncode(x.Value))).Concat(url.Query.TrimStart('?').Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries).Select(x =>{var s = x.Split('=');return new KeyValuePair<string, string>(s[0], s[1]);})).OrderBy(x => x.Key).ThenBy(x => x.Value).Select(x => x.Key + "=" + x.Value));byte[] msg = Encoding.ASCII.GetBytes(string.Format("{0}&{1}&{2}","POST".ToUpperInvariant(),UrlEncode(url.GetComponents(UriComponents.Scheme | UriComponents.UserInfo | UriComponents.Host | UriComponents.Port | UriComponents.Path, UriFormat.UriEscaped)),UrlEncode(prmstr)));using (var hs1 = new HMACSHA1(key)){return Convert.ToBase64String(hs1.ComputeHash(msg));}}/// <summary>/// 当前时间戳/// </summary>/// <returns></returns>public static int NowUtcTime(){int num = Mathf.CeilToInt((float)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds);Debug.Log(num);return num;}
    /// <summary>/// 第一步/// 请求token/// </summary>/// <returns></returns>private IEnumerator RequestToken(){Uri url = new Uri(TwitterUtility.RequetToken_URI);string head = CreateAuthorizationHeader(url, null);WWWForm form = new WWWForm();form.AddField("oauth_callback", TwitterUtility.REDIRECT_URI);using (UnityWebRequest request = UnityWebRequest.Post(url, form)){request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");request.SetRequestHeader("Authorization", head);Debug.Log(head);yield return request.SendWebRequest();if (request.isHttpError || request.isNetworkError){Debug.Log(TwitterUtility.RequetToken_URI + "========" + request.error);LoginFail(LoginError.Error);}else{if (request.responseCode == 200){byte[] results = request.downloadHandler.data;string backString = Encoding.UTF8.GetString(results);Debug.Log(backString);Dictionary<string, string> backData = TwitterUtility.AnalysisBackData(backString);foreach (var item in backData){Debug.Log(item.Key + "====" + item.Value);}Authenticate(backData);}else{LoginFail(LoginError.Error);}}}}

第二步:重定向用户

官方文档:使用推特|登录文档|推特开发者平台 (twitter.com)

介绍:

通过浏览器来实现用户登录,并重定向到指定的网址,然后通过网址和URLScheme获取Twitter返回的数据。

第二部麻烦的地方在于使用URLScheme打开app并传递参数,网上有很多现成的文档,还是比较简单的。

相关代码:

安卓端,不用打包新的aar包,直接用Unity本身自带的方法就够了,在androidmanifest文件配置中添加

  <intent-filter><action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><!--corresponds to a redirect URL of "aqua://aupay" --><dataandroid:host="test"android:scheme="test" /></intent-filter>
    /// <summary>/// 安卓端/// 网页回调返回/// </summary>private void IntentCallback_Android(){try{AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");AndroidJavaObject uri = intent.Call<AndroidJavaObject>("getData");string query = uri.Call<string>("getQuery");if (string.IsNullOrEmpty(query)){LoginFail(LoginError.UserCancel);}else{Dictionary<string, string> backData = TwitterUtility.AnalysisBackData(query);StartCoroutine(AccessTokenHandler(backData));}}catch (Exception){LoginFail(LoginError.UserCancel);}}

ios端,需要在xcode中添加urlscheme配置,同时在UnityAppController.mm文件中,添加UnitySendMessage。在网上可以搜到很多例子。

    /// <summary>/// IOS端/// 网页回调返回/// </summary>public void IntentCallback_IOS(string backData){if (!_IsLogin){return;}try{Debug.Log("ios backData:" + backData);string query = backData.Split('?')[1];Dictionary<string, string> queries = TwitterUtility.AnalysisBackData(query);StartCoroutine(AccessTokenHandler(queries));}catch (Exception){LoginFail(LoginError.UserCancel);}}

第三步:将请求令牌转换为访问令牌

官方文档:使用推特|登录文档|推特开发者平台 (twitter.com)

介绍:

这一步是在客户端通过Post请求获取可用的访问令牌,没啥难点,跟第一步差不多,注意添加Authorization就行。

相关代码:

/// <summary>
/// 第三步
/// 获取用户基础数据和token
/// </summary>
/// <param name="backData"></param>
/// <returns></returns>
private IEnumerator AccessTokenHandler(Dictionary<string, string> backData)
{Uri url = new Uri(TwitterUtility.AccessTOKEN_URI);string head = CreateAuthorizationHeader(url, null, true);Debug.Log(head);WWWForm form = new WWWForm();form.AddField("oauth_verifier", backData["oauth_verifier"]);form.AddField("oauth_token", backData["oauth_token"]);using (UnityWebRequest request = UnityWebRequest.Post(url, form)){request.SetRequestHeader("Content-Type", "application/x-www-form-urlencoded");request.SetRequestHeader("Authorization", head);yield return request.SendWebRequest();if (request.isHttpError || request.isNetworkError){LoginFail(LoginError.Error);Debug.Log(TwitterUtility.AccessTOKEN_URI + "===" + request.error);}else{if (request.responseCode == 200){byte[] results = request.downloadHandler.data;string backString = Encoding.UTF8.GetString(results);Debug.Log(backString);Dictionary<string, string> backData2 = TwitterUtility.AnalysisBackData(backString);LoginSuccess(backData2);}else{LoginFail(LoginError.Error);}}}
}

总结

刚开始我们是使用的一个过期的UnitySDk(GitHub - twitter-archive/twitter-kit-unity: Twitter Kit for Unity),官方在好几年前就不维护,现在还可以实现登录,安卓打包啥的基本没啥问题(只试了登录功能),ios在xcode中需要删除UIwebview相关的内容,替换成wkwebview,理论上应该时可以实现的,不熟悉xcode,所以最后放弃了,选择了通过网页登录。

本人是新手,文档做的不好,如果有什么地方有问题,希望大家指正。

https://dev.csdn.net/activity?utm_source=sale_source&sale_source=pPhleM8Xzjhttps://dev.csdn.net/activity?utm_source=sale_source&sale_source=pPhleM8Xzj

Unity Twitter登录接入相关推荐

  1. Unity Apple登录接入

    Unity Apple登录接入 引言 在2019年6月份的全球开发者大会(WWDC)上,苹果宣布了一款新产品:Sign In With Apple.随后苹果更新了App Store审查指南,现在他们要 ...

  2. Unity:Firebase接入Apple登录

    Unity:Firebase接入Apple登录 开启Firebase的登录方式 设置Apple的后台信息 从Assets Store下载 Singn In With Apple Xcode设置 添加A ...

  3. (unity)新手接入Facebook登录,分享以及google登录,Android,IOS,OC接入篇

    最近接Android,IOS的Facebook登录,分享 以及Google登录,分享流程以及遇到的问题整理. 一. Android接入 google登录 第一步,前往 [ firebase] http ...

  4. Unity:Firebase接入Google登录

    Unity:Firebase接入Google登录 开启Firebase的登录方式 问题小结 Google登录代码 调用登录代码 参考文章: 此文章只是粗浅之作,记录而已,有错望指出,不胜感激 开启Fi ...

  5. kakao登录接入V2版本记录

    没有中文,全程靠google浏览器强大的翻译了!!! 后续看看要不要接入旧版的 一.首先注册kakao账号 1.注册时注意:手机号码接收时用英文,用中文被拦截了收不到验证码.英文接收的时候,读完一遍先 ...

  6. Android中使用Kotlin实现Google、FaceBook、Twitter登录的封装

    最近由于项目做国际化,所以需要接入Google.FaceBook.Twitter等各种第三方登录的Api,于是查找官网资料,申请各种key和密钥,最后成功完成了这三个第三方登录Api的功能,但是由于很 ...

  7. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

  8. android集成twitter登录

    Twitter曾经举行了自己四年以来的第一场开发者大会.而这场名为"Flight"的大会,也是以后它的年度惯例. 这次大会的主题也完全围绕开发者进行.大会的焦点是一个名叫Fabri ...

  9. Google登录接入

    本文章仅作为个人笔记 Google登录官网 Google登录官方快速入门文档 GoogleApi控制台 Google登录接入前提: 开发者: 拥有google开发者账号 添加必要jar包 implem ...

  10. 小程序---365笔记第11天---微信小程序登录接入

    接入前的准备工作参考文档:微信小程序登录接入 (必做) 登录逻辑:小程序登录逻辑梳理 使用插件参考文档:https://developers.weixin.qq.com/miniprogram/dev ...

最新文章

  1. python资料包-5个G的Python学习资料包:让你从零基础成编程大神!
  2. Win7系统下Vmware虚拟机无法使用USB设备问题的解决方法
  3. Java桌面程序打包成exe可执行文件
  4. c语言总是说有一个错误,我的电脑上的c语言为何老有一个错误
  5. H. Fight Against Monsters
  6. java NIO 资料总结
  7. php 批量修改mysql 数据表,字段 字符集编码
  8. 信息学奥赛一本通(2070:【例2.13】数字对调)
  9. 托管非托管_如何利用Kubernetes的力量来优化您的托管成本
  10. 电脑上玩 Google纵横
  11. Python连接Oracle-常见问题
  12. php bc 比较,php BC高精确度函数库
  13. 新浪云python示例_新浪SAE部署python项目
  14. UnityShader7:内置包含文件UnityCG.cginc与GG/HLSL语义
  15. struts2 中的 addActionError 、addFieldError、addActionMessage方法的区别添加错误信息
  16. LINUX查看文件系统
  17. [wine5.0] ubuntu超级详细的wine5.0攻略(安装配置wine、微信、游戏等)
  18. Java运行环境下载
  19. 利用stm32cubemx生成单极性倍频spwm调制代码步骤
  20. 37岁,感觉上班太累,可做这5个生意,年轻人看不上,但却挺赚钱

热门文章

  1. ionic4基础教程(案例和实战小demo)
  2. 卡内基梅隆 计算机音乐,卡内基梅隆大学音乐技术专业申请要求
  3. 运算放大器的简要理解
  4. 微信HOOK 退出群聊
  5. S3C2440c语言汇编传参点灯
  6. 程序员编程中遇到的那些灵异事件,胆小误入!
  7. linux gmail邮件服务器,gmail 授权linux服务器登录使用gmail发送邮件
  8. Apache正向代理与反向
  9. 一阶线性微分方程 解法
  10. tdr 定位公式_时域反射计TDR原理详细解析