友盟分享簡單集成和常見問題解決

在iOS開發(fā)中,當(dāng)我們需要集成多個平臺分享時,多數(shù)情況下我們會通過友盟,ShareSDK等第三方的分享平臺來加快開發(fā)進度,關(guān)于友盟分享的集成方法在其官網(wǎng)上以及有詳細指導(dǎo),這里簡單介紹下流程,文章后面分享一些在集成友盟分享時遇到的問題和解決方法。

導(dǎo)入框架

  1. 使用CocoaPods集成
    pod 'UMengSocialCOM', '~> 5.2.1'
    pod install

  2. 手動下載時,將下面文件夾導(dǎo)入到工程路徑下。附:官方sdk下載頁面
    UMSocial_Sdk_x.x.x 文件夾
    UMSocial_Sdk_Extra_Frameworks 文件夾

添加系統(tǒng)需要的framework

  1. target->Bulid Phases->Linked Binary and Libraries中增加以下框架:
    Security.framework
    libiconv.tbd
    SystemConfiguration.framework
    CoreGraphics.Framework
    libsqlite3.tbd
    CoreTelephony.framework
    libstdc++.tbd
    libz.tbd
    ImageIO.framework

  2. 在Bulid Settings---other linker flags增加
    -ObjC

設(shè)置友盟appkey

在友盟官網(wǎng)上注冊賬號后,在首頁上選擇“友盟分享”后,進入友盟分享的管理頁,為自己的應(yīng)用注冊一個appkey。


得到appkey后,在AppDelegate中的-didFinishLaunchingWithOptions使用:
#import "UMSocial.h"
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
[UMSocialData setAppKey:@"上圖中得到的appkey"];
}

配置第三方APPID

在需要分享的平臺的開發(fā)者官網(wǎng)上為自己的應(yīng)用注冊信息,并拿到相應(yīng)的使用秘鑰
QQ申請地址: http://open.qq.com
微信申請地址:https://open.weixin.qq.com
新浪申請地址:http://open.weibo.com
將下面的方法同樣寫在AppDelegate的-didFinishLaunchingWithOptions方法中

    //設(shè)置微信AppId、appSecret,分享url
    [UMSocialWechatHandler setWXAppId:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" url:@"http://www.umeng.com/social"];
    //設(shè)置手機QQ 的AppId,Appkey,和分享URL,需要#import "UMSocialQQHandler.h"
    [UMSocialQQHandler setQQWithAppId:@"100424468" appKey:@"c7394704798a158208a74ab60104f0ba" url:@"http://www.umeng.com/social"];
    //打開新浪微博的SSO開關(guān),設(shè)置新浪微博回調(diào)地址,這里必須要和你在新浪微博后臺設(shè)置的回調(diào)地址一致。需要 #import "UMSocialSinaSSOHandler.h"
    [UMSocialSinaSSOHandler openNewSinaSSOWithAppKey:@"3921700954" secret:@"04b48b094faeb16683c32669824ebdad" RedirectURL:@"http://sns.whalecloud.com/sina2/callback"];

配置系統(tǒng)回調(diào)

在APPdelegate.m中增加下面的系統(tǒng)回調(diào)配置,注意如果同時使用微信支付、支付寶等其他需要改寫回調(diào)代理的SDK,請在if分支下做區(qū)分,否則會影響 分享、登錄的回調(diào)

    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    BOOL result = [UMSocialSnsService handleOpenURL:url];
         if (result == FALSE) {
         //調(diào)用其他SDK,例如支付寶SDK等
         }
         return result;
    }

配置URL scheme

target->Info->URL Types 中添加 URL Schemes,根據(jù)分享需要選擇性添加,格式如下:

|平臺|url scheme設(shè)置格式|例子
|---|--|
|新浪|"wb"+"新浪appkey"|例如:wb126663232|
|微信|"微信應(yīng)用appId"|例如:wxd9a39c7122aa6516|
|QQ、QQ空間|1. “QQ”+十六進制appId(不足8位前面補0)|例如:QQ05FC5B14|
||2. “tencent“+appId,|:例如tencent100424468

調(diào)用默認風(fēng)格進行分享

如果想快速集成的話,可以直接使用友盟內(nèi)置分享UI界面

    [UMSocialData defaultData].extConfig.title = @"分享的title";
    [UMSocialData defaultData].extConfig.qqData.url = @"http://baidu.com";
    [UMSocialSnsService presentSnsIconSheetView:self
                                 appKey:@"507fcab25270157b37000010"
                              shareText:@"友盟社會化分享讓您快速實現(xiàn)分享等社會化功能,http://umeng.com/social"
                             shareImage:[UIImage imageNamed:@"icon"]
                        shareToSnsNames:@[UMShareToWechatSession,UMShareToWechatTimeline,UM        ShareToSina,UMShareToQQ,UMShareToQzone]
                               delegate:self]; 

分享后回調(diào)方法:

    -(void)didFinishGetUMSocialDataInViewController:(UMSocialResponseEntity *)response
    {
        //根據(jù)`responseCode`得到發(fā)送結(jié)果,如果分享成功
        if(response.responseCode == UMSResponseCodeSuccess)
        {
            //得到分享到的平臺名
            NSLog(@"share to sns name is %@",[[response.data allKeys] objectAtIndex:0]);
        }      
    }

問題及解決方法

  • 解決控制臺"This app is not allowed to query for scheme xxxx"問題

1 . info.plist -> NSApp Transport Security下新增(NS前綴可以省略)
NSAllowsArbitraryLoads : YES
2 . Info.plist -> LSApplicationQueriesSchemes (沒有就創(chuàng)建,Array類型),將所有的xxxx增加到數(shù)組中:


  • 控制臺"The resource could not be loaded because the App Transport Security policy requires the use of a secure connection."錯誤

以iOS9 SDK編譯的工程會默認以SSL安全協(xié)議進行網(wǎng)絡(luò)傳輸,即HTTPS,如果依然使用HTTP協(xié)議請求網(wǎng)絡(luò)會報系統(tǒng)異常并中斷請求。
比較簡單的方法是在info.plist->NSAppTransportSecurity下增加
NSAllowsArbitraryLoads : YES
指定所有HTTP連接都可正常請求

  • 解決AppStore上架問題

Additionally, we found that your app requires the installation of another app before it can be used, which is not in compliance with the App Store Review Guidelines. Apps should be able to run on launch, without requiring additional applications to be installed.
Specifically, we were required to install WeChat/QQ before we could use the sharing features in your app.
Please revise your app so that a user can use it upon launch. If your app requires authentication before use, please use a method that can authenticate users from within your app.
使用微信分享、登錄必須安裝微信客戶端,QQ登錄、QQ空間分享過程中必須安裝手機QQ客戶端,在未安裝客戶端的設(shè)備上測試會提示下載,這是不符合蘋果審核規(guī)則的。所以在調(diào)用前我們先調(diào)用微信SDK或QQ互聯(lián)SDK的方法檢測是否安裝微信/QQ客戶端
判斷方法在下面兩個頭文件內(nèi):
#import "WXApi.h"
#import <TencentOpenAPI/QQApiInterface.h>
創(chuàng)建一個可變數(shù)組存放可分享的平臺
//彈出前先檢測平臺是否安裝
NSMutableArray *platformArray = [[NSMutableArray alloc] init];
if ([WXApi isWXAppInstalled]) {
[platformArray addObject:UMShareToWechatTimeline];
[platformArray addObject:UMShareToWechatSession];
}
if ([QQApiInterface isQQInstalled]) {
[platformArray addObject:UMShareToQzone];
[platformArray addObject:UMShareToQQ];
}
//彈出分享平臺選擇界面
[UMSocialSnsService presentSnsIconSheetView:self
appKey:@"507fcab25270157b37000010"
shareText:@"友盟社會化分享讓您快速實現(xiàn)分享等社會化功能,http://umeng.com/social"
shareImage:[UIImage imageNamed:@"icon"]
shareToSnsNames:platformArray//使用上面的變量
delegate:self];

  • 模擬器中運行報錯Undefined symbols for architecture i386

由于最新版本的QQ sdk_v_3.1.0中去除了i386架構(gòu)的支持因此,后續(xù)凡使用了新版友盟的,都只要在真機運行通過即可

附:友盟分享論壇-開發(fā)者社區(qū)FAQ

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 友盟能實現(xiàn)分享功能,友盟+申請第三方賬號的目的: 進行分享、授權(quán)操作需要在第三方平臺創(chuàng)建應(yīng)用并提交審核,友盟...
    CoderZb閱讀 9,918評論 8 60
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,872評論 25 709
  • 你是不是覺得身邊有一些人,看似無所事事吊兒郎仿佛也在虛度年華,但你不知道,他可能在你不知道的時候為自己的夢想努力付...
    孫小山閱讀 1,851評論 2 3
  • 問:冰為什么會融化呢? 答:因為太陽越來越強,冰很快就融化了。 問:圍巾為什么是綠色的? 答:因為這表示環(huán)保。 問...
    陸_79f8閱讀 257評論 0 2
  • 20170821 親愛的自己,今天老公回單位了;下午又送兒子回學(xué)校,兒子在外租了房子住。由于之前兒子和我交流過,我...
    湛藍語語閱讀 156評論 0 0

友情鏈接更多精彩內(nèi)容