React Native 接入微博、微信、QQ 登錄功能

来源:http://www.cnblogs.com/parry/archive/2016/01/27/react_native_sns_weibo_wechat_qq_login.html
-Advertisement-
Play Games

在 App 開發中我們經常需要在用戶登錄模塊接入 SNS 登錄組件,這樣會大大提高用戶的註冊體驗。特別當一個不是剛性需求 App 推廣的時候,這樣會很大的降低用戶體驗的成本,沒有人願意忍受輸入郵箱、手機號碼去註冊一個賬號的流程。 本文主要分享了在 React Native 中接入微博、微信、QQ ...


在 App 開發中我們經常需要在用戶登錄模塊接入 SNS 登錄組件,這樣會大大提高用戶的註冊體驗。特別當一個不是剛性需求 App 推廣的時候,這樣會很大的降低用戶體驗的成本,沒有人願意忍受輸入郵箱、手機號碼去註冊一個賬號的流程。
本文主要分享了在 React Native 中接入微博、微信、QQ 登錄的流程,以及此前登錄組件中修複的一個已知 bug 的修複。
我的源博客地址:http://blog.parryqiu.com/2016/01/27/react_native_sns_weibo_wechat_qq_login/

使用的登錄組件

這裡使用的組件是 react-native-open-share,此組件從 iOS 的 SNS 通用登錄組件 OpenShare fork 出來的,添加了到 React Native 的組件映射。源作者是 Jiayao Wu,後來我在使用的過程中發現了新浪微博登錄的一個 bug,下麵會說明此 bug 的原因。我 fork 出來後,修複了此 bug,修複後的項目在 react-native-open-share,等待源作者 merge 進 master 中去,目前需要使用的可以去我的項目地址中下載使用。

截圖

項目接入

項目前期具體接入的過程在項目頁面已經做了詳細的說明,如果在接入過程中遇到什麼問題歡迎留言討論。
這裡主要針對接入過程中可能需要註意的幾個點作一些說明。

關於新浪微博、微信、QQ 接入審核的註意點

  • 三個平臺都需要進行項目提交審核,一般都是一到兩個工作日審核結束。
  • 新浪微博、QQ 獲取登錄許可權是免費的,微信的登錄許可權(以及一些其他的高級功能)需要每年繳納300元人民幣的費用。
    平臺對應的地址分別為:新浪微博微信QQ

關於項目中 key 以及認證 URL 的設置

項目中兩個地方需要設置key,分別為 Info.plistAppDelegate.m 中。
需要註意的是,在 Info.plist 中,key 的前面是有首碼的,按照示常式序中的添加修改即可,一定要註意。
新浪微博需要特別註意,授權回調頁的 URL 需要和登錄組件中的 URL 完全一致,因為 App 不涉及到回調後的頁面,所以只要保證兩個 URL 一致並能訪問即可。

截圖

組件中的 URL 地址定義在文件 SocietyLoginManager.m 中的約 105 行處。

截圖

其他沒有特別需要註意的地方,按照項目接入說明接入即可。

React Native 中的使用

在 React Native 通過添加三個 SNS 的圖標,添加上對應的方法調用即可,代碼如下:

var openShare = require('react-native-open-share'); //頭部導入組件

_weiboLogin: function() {
        var _this = this;
        openShare.weiboLogin();

        if (!_this.weiboLogin) {
            _this.weiboLogin = DeviceEventEmitter.addListener(
                'managerCallback', (response) => {
                    AlertIOS.alert(
                        'response',
                         JSON.stringify(response)
                    );

                    _this.weiboLogin.remove();
                    delete _this.weiboLogin;
                }
            );
        }
    },

    _qqLogin: function() {
        var _this = this;
        openShare.qqLogin();

        if (!_this.qqLogin) {
            _this.qqLogin = DeviceEventEmitter.addListener(
                'managerCallback', (response) => {
                    AlertIOS.alert(
                        'response',
                        JSON.stringify(response)
                    );

                    _this.qqLogin.remove();
                    delete _this.qqLogin;
                }
            );
        }
    },

    _wechatLogin: function() {
        var _this = this;
        openShare.wechatLogin();

        if (!_this.wechatLogin) {
            _this.wechatLogin = DeviceEventEmitter.addListener(
                'managerCallback', (response) => {
                    AlertIOS.alert(
                        'response',
                        JSON.stringify(response)
                    );

                    _this.wechatLogin.remove();
                    delete _this.wechatLogin;
                }
            );
        }
    }

接入後就可以在 alert 中看到返回的 json 數據了。

之前組件中存在的一個 bug 處理

之前的組件,在微博返回數據的時候直接使用 NSDictionary 進行返回了,但是微博的 SDK 中返回日期類型的時候會導致 React Native 解析 json 的時候報錯,錯誤如下:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Invalid type in JSON write (__NSDate)'    
*** First throw call stack:
...

主要的出錯代碼在文件 SocietyLoginManager.m 中的約 112 行處。
所以對返回的數據增加對應的日期格式化函數,並調用即可。
主要的處理函數,相關的調用去查看源代碼即可。

//處理 返回數據中的 expirationDate 值,因為值的格式有問題,轉換成 string 後才能符合 json 的格式要求。 ********開始********
//Commit by Parry at 2016-01-26

- (NSMutableDictionary*)change: (NSDictionary *)message {

  NSMutableDictionary* data = [message mutableCopy];
  if ([message objectForKey:@"expirationDate"]) {
    
    NSDateFormatter *dateToStringFormatter = [[NSDateFormatter alloc] init];
    [dateToStringFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    
    NSDate *date= [data objectForKey:@"expirationDate"];
    NSString *strDate = [dateToStringFormatter stringFromDate:date];
    
    data = [message mutableCopy];
    
    [data setObject:strDate forKey:@"expirationDate"];
  }
  return data;
  
}

//處理 返回數據中的expirationDate值,因為值的格式有問題,轉換成 string 後才能符合 json 的格式要求。 ********結束********

這樣,這個 React Native 下的 SNS 登錄通用組件就可以完美地使用了。
使用中有任何問題歡迎留言交流、討論。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 設置全站的字體一直是一個簡單而又不簡單的事,因為深入下去,這裡面牽扯到太多的東西。本文主要是想說說對於一個普通的網站,如何根據自己的需求選擇字體。1、必備知識首先,我們應該明確,並不是你設置了這種字體,用戶電腦便會以這種字體顯示。如果用戶電腦沒有安裝這種字體,那麼它便會以你設置的第二種字體來渲染。看...
  • 語義化這個詞我想大家都看到了無數次,特別是在一些招聘廣告上。其實我自己也是,不過每次看到都覺得是那些招聘公司複製的,其實他們根本說不清語義化是什麼,而且也根本不看重。所以我一直也沒把這東西當回事過。然而最近當我再次看到這個詞時,我想我應該好好思考下這問題了。就寫篇博客記錄下。一、什麼是語義化?在解釋...
  • 效果:http://hovertree.com/texiao/css3/1/本效果主要使用text-shadow實現.參考:http://hovertree.com/h/bjaf/css3_text_effect.htm代碼如下:超炫CSS3文字特效集錦DEMO演示 - 何問起OutlinedAOu...
  • DOM操作分為3個方面:DOM Core 任何一種支持DOM Core的語言都可以使用它,比如getElementById就是DOM Core操作HTML-DOM 只能用來處理web文檔CSS-DOM 針對CSS的操作關於jQuery中的DOM操作查找節點可以很輕易通過就jQuery選擇器來找到.....
  • 引用類型的值(對象)是引用類型的一個實例,在ES中引用類型是一種數據結構,將數據和功能組織在一起。引用類型有時候也被稱之為對象定義,因為他們描述的是一類對象所具有的屬性和方法。Object類型兩種創建方式1 new Object()var person = new Object();person.n...
  • 嚴格模式是一種將更好的錯誤檢查引入代碼中的方法。在使用嚴格模式時,無法使用隱式聲明的變數、將值賦給只讀屬性或將屬性添加到不可擴展的對象等1、嚴格模式的目的1)消除Javascript語法的一些不合理、不嚴謹之處,減少一些怪異行為 2)消除代碼運行的一些不安全之處,保證代碼運行的安全 3) 提...
  • 如果說Origami這款動效原型工具是Facebook Paper的幕後功臣,那麼POP便是Origami的地基。感謝Facebook開源了POP動效庫,讓人人都能製作出華麗的動效。我們只需5步,便能搞定酷炫的動效。步驟1: 安裝使用CocoaPods安裝POP,只需要在Podfile中加入這麼一行...
  • 在做一些安全性的軟體時候常常要考慮取消 EditText 上的複製粘貼功能以確保全全性。下麵就記錄了這個方法:首先在API-11以下的版本很簡單,只需要在Xml佈局文件或者用代碼把長按屬性設置成false就可以。1 editText.setLongClickable(false); // Xml l...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...