1. 程式人生 > >iOS開發-Umeng第三方登入-個人整理

iOS開發-Umeng第三方登入-個人整理

一、註冊友盟賬號

登陸友盟官網,在我的產品頁面新增新應用,然後獲取到Appkey.

http://www.jianshu.com/p/be1f596090c7

二、申請第三方賬號

1.新浪微博

登入新浪微博開放平臺(點選連結),填寫相關應用資訊並上傳icon圖片。注意修改安全域名為sns.whalecloud.com 同時設定授權回撥頁為 安全域名設定在應用資訊-->基本資訊.


新浪申請賬號介面.jpg.png


授權回撥頁、取消授權回撥頁設定在應用資訊-->高階資訊.


新浪設定回撥頁.png
  • 安全域名的修改需要二次稽核通過才生效,授權回撥頁修改即時生效.

    2.微信

    登入微信開放平臺(點選連結),填寫相關應用資訊,稽核通過後獲取到微信AppID及AppSecret,如果需要微信登入功能,需要申請微信登入許可權.

    3.QQ及Qzone

    QQ及Qzone使用同一個AppID及Appkey,登入騰訊開放平臺(點選連結) ,選擇移動應用,填寫相關應用資訊並提交稽核,未稽核前通過只能使用測試賬號,新增測試賬號方法如下: 選擇使用者能力-->進階社交能力-->應用除錯者,新增測試賬號必須在申請者好友列表中.


    新增測試賬號.png

    4.人人網

    登入人人開放平臺(點選連結) ,填寫相關應用資訊,同時填寫應用根域名為sns.whalecloud.com 具體位置: 基本資訊-->應用根域名.


    人人網基本資訊.png

    5.豆瓣


    豆瓣回撥地址.png
    豆瓣api.png

    三、繫結第三方賬號到友盟後臺

    目前需要在友盟後臺繫結的第三方賬號為:新浪微博、騰訊微博、人人網、豆瓣、Qzone,其餘平臺如微信、QQ直接在程式碼中設定.
    繫結地址:http://umeng.com/apps
    登入友盟網站->左上角選擇你們的產品->元件->社會化元件->設定.


    新增到Umeng後臺.png

    1.短連結開關

    短連結開關只對新浪微博、騰訊微博、人人網、豆瓣四個平臺有效,開啟短連結開關,分享文案中附加的連結會被轉碼,同時可以統計到分享迴流率(點選連結的次數),關閉短連結開關則無法統計,短連結開關預設為關閉狀態.

    2.文字截斷開關

    文字截斷開關只對新浪微博、騰訊微博、人人網、豆瓣四個平臺有效,同時只對使用自定義分享編輯頁或沒有分享編輯頁使用者有效,當分享文案超出字數限制時自動截斷,開關狀態預設關閉。

    四、適配iOS9系統

    在新發布的iOS9系統上圍繞使用者資料的安全性和體驗新增了一些安全特性,同時也影響了應用的實現以及整合方式,為了保證良好的穩定性和體驗,需要做如下處理:

    1.HTTP傳輸安全

    以iOS9 SDK編譯的工程會預設以SSL安全協議進行網路傳輸,即HTTPS,如果依然使用HTTP協議請求網路會報系統異常並中斷請求。目前可用如下兩種方式保持用HTTP進行網路連線:
    A、在info.plist中加入安全域名白名單(右鍵info.plist用source code開啟)

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSExceptionDomains</key>
      <dict>
          <key>log.umsns.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSTemporaryExceptionMinimumTLSVersion</key>
              <string>TLSv1.1</string>
          </dict>
          <key>sns.whalecloud.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSTemporaryExceptionMinimumTLSVersion</key>
              <string>TLSv1.1</string>
          </dict>
    
          <!-- 整合新浪微博對應的HTTP白名單-->
          <key>sina.cn</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>weibo.cn</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>weibo.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>sinaimg.cn</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>sinajs.cn</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>sina.com.cn</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- 新浪微博-->
    
          <!-- 整合微信、QQ、Qzone、騰訊微博授權對應的HTTP白名單-->
          <key>qq.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- 騰訊授權-->
    
          <!-- 整合人人授權對應的HTTP白名單-->
          <key>renren.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
              <true/>
              <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- 人人授權-->
    
          <!-- 整合Facebook授權對應的HTTP白名單-->
          <key>facebook.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>                
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>fbcdn.net</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <key>akamaihd.net</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- Facebook授權-->
    
          <!-- 整合Twitter授權對應的HTTP白名單-->
          <key>twitter.com</key>
          <dict>
              <key>NSIncludesSubdomains</key>
              <true/>                
              <key>NSExceptionRequiresForwardSecrecy</key>
              <false/>
          </dict>
          <!-- Twitter授權-->
      </dict>
    </dict>

    注:以上部分平臺官方未給出相應白名單,由技術人員測試各個平臺所收集而來,如果有所遺漏,請自行加入並向客服說明,我們會進一步補充名單.
    B、在info.plist的NSAppTransportSecurity下新增NSAllowsArbitraryLoads並設定為YES,指定所有HTTP連線都可正常請求 http://dev.umeng.com/social/ios/ios9

    <key>NSAppTransportSecurity</key>
    <dict>
      <key>NSAllowsArbitraryLoads</key>
      <true/>
    </dict>

    2.應用跳轉(SSO等)

    如果你的應用使用瞭如SSO授權登入或跳轉分享功能,在iOS9下就需要增加一個可跳轉的白名單,指定對應跳轉App的URL Scheme,否則將在第三方平臺判斷是否跳轉時用到的canOpenURL時返回NO,進而只進行webview授權或授權/分享失敗.
    同樣在info.plist增加:

    <key>LSApplicationQueriesSchemes</key>
    <array>
      <!-- 微信 URL Scheme 白名單-->
      <string>wechat</string>
      <string>weixin</string>
    
      <!-- 新浪微博 URL Scheme 白名單-->
      <string>sinaweibohd</string>
      <string>sinaweibo</string>
      <string>sinaweibosso</string>
      <string>weibosdk</string>
      <string>weibosdk2.5</string>
    
      <!-- QQ、Qzone URL Scheme 白名單-->
      <string>mqqapi</string>
      <string>mqq</string>
      <string>mqqOpensdkSSoLogin</string>
      <string>mqqconnect</string>
      <string>mqqopensdkdataline</string>
      <string>mqqopensdkgrouptribeshare</string>
      <string>mqqopensdkfriend</string>
      <string>mqqopensdkapi</string>
      <string>mqqopensdkapiV2</string>
      <string>mqqopensdkapiV3</string>
      <string>mqzoneopensdk</string>
      <string>wtloginmqq</string>
      <string>wtloginmqq2</string>
      <string>mqqwpa</string>
      <string>mqzone</string>
      <string>mqzonev2</string>
      <string>mqzoneshare</string>
      <string>wtloginqzone</string>
      <string>mqzonewx</string>
      <string>mqzoneopensdkapiV2</string>
      <string>mqzoneopensdkapi19</string>
      <string>mqzoneopensdkapi</string>
      <string>mqqbrowser</string>
      <string>mttbrowser</string>
    
      <!-- 人人 URL Scheme 白名單-->
      <string>renrenios</string>
      <string>renrenapi</string>
      <string>renren</string>
      <string>renreniphone</string>
    
      <!-- 來往 URL Scheme 白名單-->
      <string>laiwangsso</string>
    
      <!-- 易信 URL Scheme 白名單-->
      <string>yixin</string>
      <string>yixinopenapi</string>
    
      <!-- instagram URL Scheme 白名單-->
      <string>instagram</string>
    
      <!-- whatsapp URL Scheme 白名單-->
      <string>whatsapp</string>
    
      <!-- line URL Scheme 白名單-->
      <string>line</string>
    
      <!-- Facebook URL Scheme 白名單-->
      <string>fbapi</string>
      <string>fb-messenger-api</string>
      <string>fbauth2</string>
      <string>fbshareextension</string>
    </array>
  • 注:以上部分平臺官方未給出相應白名單,由技術人員測試各個平臺所收集而來,如果有所遺漏,請自行加入並向客服說明,我們會進一步補充名單。

    3. 應用瘦身(App Thining)

    iOS9 SDK新增了對App瘦身的功能,詳情見App Thining。目前各個第三方平臺正在進行App thining的支援,所以為了正常使用第三方SDK及分享SDK,需要在Build Setting中將Enable bitcode關閉,或設定編譯標識ENABLE_BITCODE=NO。
  • 注:bitcode僅在Xcode7以上顯示並預設開啟。

    五、下載並安裝SDK

    1.使用cocoaPods

    如需使用CocoaPods 在Podfile中增加一行,內容如下:
    pod 'UMengSocial', '~> 5.0'
    然後執行安裝即可
    pod install

    2.下載SDK

    http://dev.umeng.com/social/ios/sdk-download

    3.設定友盟apply

  • 獲取友盟Appkey。如果你之前已經在友盟註冊了應用,獲得了Appkey,可以繼續使用之前獲得Appkey.
  • 如果你尚未在友盟註冊賬號,需要先註冊,註冊之後登入你的賬號,點選新增新應用,完成新應用填寫之後,將進入應用管理頁面。在該頁面就能得到Appkey.
  • 在程式碼中設定你的友盟Appkey,在 AppDelegate檔案內設定你的AppKey:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [UMSocialData setAppKey:@"your Umeng appKey"];

// 用下面的程式碼開啟我們SDK在控制檯的輸出後能看到相應的錯誤碼
    [UMSocialData openLog:YES];
}

並新增下方的系統回撥方法:

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary*)options{
     return  [UMSocialSnsService handleOpenURL:url];
}

六、配置URL schemes

1.為什麼要配置 URL schemes

URL schemes 和跳出應用後返回應用的邏輯相關,因此如果使用了SSO授權功能或QQ、微信、webview方式的Facebook,就必須配置URL schemes,否則跳出應用後將無法返回.

2. 如何設定 URL schemes

在你的工程設定項,targets 一欄下,選中自己的 target,在 Info->URL Types 中新增 URL Schemes。如果使用的是Xcode3或更低版本,則需要在plist檔案中新增。獲取各個平臺appkey或者appid的方法可以參考分享詳細文件繫結各個平臺部分,各個平臺的url scheme格式如下表:

平臺 url scheme設定格式
新浪微博 “wb”+新浪appkey,例如“wb126663232”
微信 微信應用appId,例如“wxd9a39c7122aa6516”
人人網 “rm”+你的應用bundle id,例如“rmcom.umeng.SocialSDK”
QQ、QQ空間 需要新增兩個URL schemes 1. “QQ”+騰訊QQ互聯應用appId轉換成十六進位制(不足8位前面補0),例如“QQ05FC5B14”。生成十六進位制方法:點選連結。2.“tencent“+騰訊QQ互聯應用Id,例如“tencent100424468"
來往 Identifier填“Laiwang”,URL Schemes填來往AppId.注意使用來往SDK後,Xcode工程other linker flags需要新增-ObjC引數
易信 易信Appkey,例如“yx35664bdff4db42c2b7be1e29390c1a06”
Facebook 整合最新的Facebook SDK在iOS7.0以上有效,若要使用我們提供的facebook分享需要設定“fb”+facebook AppID,例如“fb1440390216179601”

七、第三方登入

1.第三方登入概述

第三方登入主要用於簡化使用者登入流程,通過使用者擁有的微博、QQ、微信等第三方賬號進行登入並且構建APP自己的登入賬號體系.
實現第三方登入主要通過下面兩步:

  • 在第三方平臺完成授權
  • 獲取第三方平臺的accesstoken資訊及使用者資料

1.1第三方登入支援的平臺

目前友盟社會化元件支援的第三方登入平臺為:新浪微博、微信、QQ、QQ空間、騰訊微博、人人網、豆瓣、Facebook、Twitter.

2.新浪微博登入

在AppDelegate應用入口方法新增下面的方法:

//設定分享到QQ/Qzone的應用Id,和分享url 連結
    #import "UMSocialQQHandler.h"
    [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"新浪 appkey"
                                              secret:@"新浪secret"
                                         RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

在新浪微博登入按鈕中實現下面的方法:

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToSina];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          獲取微博使用者名稱、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToSina];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});

刪除授權呼叫下面的方法:

[[UMSocialDataService defaultDataService] requestUnOauthWithType:UMShareToSina  completion:^(UMSocialResponseEntity *response){
        NSLog(@"response is %@",response);
    }];

3.QQ及Qzone登入

QQ登入只支援SSO登入方式,必須具備手機QQ客戶端,Qzone預設呼叫SSO登入.
新增配置檔案參考文件:新增QQ及Qzone,新增相關庫檔案,配置URL schemes及新增系統回撥,在AppDelegate應用入口方法新增下面的方法:

//設定分享到QQ/Qzone的應用Id,和分享url 連結
    #import "UMSocialQQHandler.h"
    [UMSocialQQHandler setQQWithAppId:@"qq id" appKey:@"qq apply" url:@"http://www.umeng.com/social"];

在QQ登入按鈕中實現下面的方法:

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQQ];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          獲取微博使用者名稱、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQQ];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});

在Qzone登入按鈕中實現下面的方法:

UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToQzone];

        snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){

//          獲取微博使用者名稱、uid、token等

            if (response.responseCode == UMSResponseCodeSuccess) {

                UMSocialAccountEntity *snsAccount = [[UMSocialAccountManager socialAccountDictionary] valueForKey:UMShareToQzone];

                NSLog(@"username is %@, uid is %@, token is %@ url is %@",snsAccount.userName,snsAccount.usid,snsAccount.accessToken,snsAccount.iconURL);

            }});
  • 在SDK5.0及之後的版本中,使用者資訊都直接在授權之後便會返回,可以在snsAccount裡獲取全部的使用者資訊資料.
  • Qzone將UMShareToQQ替換為UMShareToQzone即可.

    4.微信登入

    新增配置檔案參考文件:新增微信及朋友圈,新增相關庫檔案,配置URL schemes及新增系統回撥:
  • 注意微信登入必須先在微信開放平臺申請微信登入許可權
    在你的程式APPdelegate入口方法新增下面的程式碼:

    #import "UMSocialWechatHandler.h"
      //設定微信AppId、appSecret,分享url
      [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];

    在微信登入按鈕中實現下面的方法:

    UMSocialSnsPlatform *snsPlatform = [UMSocialSnsPlatformManager getSocialPlatformWithName:UMShareToWechatSession];
    
          snsPlatform.loginClickHandler(self,[UMSocialControllerService defaultControllerService],YES,^(UMSocialResponseEntity *response){
    
              if (response.responseCode == UMSResponseCodeSuccess) {
    
                  UMSocialAcco