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. 样式集(一) 通用商品列表样式
  2. 程序的加载和执行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
  3. 深入了解jQuery之整体架构
  4. WPF 透明窗口在桌面上放虫子。。。
  5. 这是不是帮女朋友拍照时的你?哈哈哈哈
  6. 线段树区间合并--询问某段区间内最长连续上升子序列即最长上升子串
  7. Linux虚拟机添加新硬盘的全程图解
  8. JAVA多线程之synchronized和volatile实例讲解
  9. 翻身的废鱼——论PHP从入门到放弃需要多久?18
  10. Hibernate 下载、安装和使用
  11. 微信小程序推广多多进宝商品,微信小程序跳转拼多多小程序领券页面,微信小程序跳转多多进宝推广链接
  12. 麦克风阵列入门(一)
  13. matlab 以10为底的对数
  14. MFC 添加静态图片(Picture Control控件)
  15. win10怎么还原成win7系统
  16. 百家争鸣的低代码平台
  17. NRF24L01的配置详解
  18. 苹果花了 5000 万美元找特斯拉买电池,它想做什么?
  19. 30个高质量的数据集网站,你必须要试试!
  20. http://www.prayer-laputa.com/blog/archives/588

热门文章

  1. Wide Deep模型
  2. 自我鉴定计算机专业大学,大学生计算机专业的自我鉴定书
  3. 技术文摘11 fang money 技术 资料
  4. Unity3D手游开发实践《腾讯桌球》客户端开发经验总结(转自GameRes游资网)
  5. 山寨版Google识图
  6. 计算机专业职业规划英语小作文,五年职业规划英语作文
  7. 计算机windows用户名密码怎么查,如何查看Windows和Office的密码、序列号
  8. CSDN如何上传照片
  9. Python学习笔记--字符串及其常见操作
  10. HTML+CSS学习——奥运五环代码