前言:
時隔一年,又來做第三方分享了。這次還是用友盟,但是得從頭再來了,技術不斷更新,我也得不斷學習。
開發環境:
xcode8 +ios9以上。
一、手動集成
1.下載U-Share SDK
http://dev.umeng.com/social/ios/sdk-download
沒有廣告就不要選IDFA
2.接入U-Share SDK
注意點:
添加項目配置
在Other Linker Flags加入-ObjC ,注意不要寫為-Objc 。項目已做了
加入以下系統庫:
libsqlite3.tbd 現在的項目需要加入
CoreGraphics.framework 已經存在
添加第三方平臺依賴庫,這點因為是下載選擇的是精簡版,不需要。
3.info.plish配置白名單
如果你的應用使用了如SSO授權登錄或跳轉到第三方分享功能,在iOS9/10下就需要增加一個可跳轉的白名單,即LSApplicationQueriesSchemes,否則將在SDK判斷是否跳轉時用到的canOpenURL時返回NO,進而只進行webview授權或授權/分享失敗。 在項目中的info.plist中加入應用白名單,右鍵info.plist選擇source code打開(plist具體設置在Build Setting -> Packaging -> Info.plist File可獲取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>mqqopensdkapiV4</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>
</array>
坑:原先LSApplicationQueriesSchemes已經存在的,就在原來的目錄下添加對應名單,就QQ沒有顯示出來,才發現直接把上面整段復制進去info.plist是不可以的,編譯就不見了。
4.URL Scheme
URL Scheme是通過系統找到并跳轉對應app的一類設置,通過向項目中的info.plist文件中加入URL types可使用第三方平臺所注冊的appkey信息向系統注冊你的app,當跳轉到第三方應用授權或分享后,可直接跳轉回你的app。
5.初始化設置
初始化U-Share及第三方平臺
應用啟動后進行U-Share和第三方平臺的初始化工作 以下代碼將所有平臺初始化示例放出,開發者根據平臺需要選取相應代碼,并替換為所屬注冊的appKey和appSecret。
在AppDelegate.m中設置如下代碼
#import <UMSocialCore/UMSocialCore.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
/* 打開調試日志 */
[[UMSocialManager defaultManager] openLog:YES];
/* 設置友盟appkey */
[[UMSocialManager defaultManager] setUmSocialAppkey:USHARE_DEMO_APPKEY];
[self configUSharePlatforms];
[self confitUShareSettings];
// Custom code
return YES;
}
- (void)confitUShareSettings
{
/*
* 打開圖片水印
*/
//[UMSocialGlobal shareInstance].isUsingWaterMark = YES;
/*
* 關閉強制驗證https,可允許http圖片分享,但需要在info.plist設置安全域名
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
*/
//[UMSocialGlobal shareInstance].isUsingHttpsWhenShareContent = NO;
}
- (void)configUSharePlatforms
{
/* 設置微信的appKey和appSecret */
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:@"wxd930ea5d5a258f4f" appSecret:@"db426a9829e4b49a0dcac7b4162da6b6" redirectURL:@"http://mobile.umeng.com/social"];
/*
* 移除相應平臺的分享,如微信收藏
*/
[[UMSocialManager defaultManager] removePlatformProviderWithPlatformTypes:@[@(UMSocialPlatformType_WechatFavorite)]];
/* 設置分享到QQ互聯的appID
* U-Share SDK為了兼容大部分平臺命名,統一用appKey和appSecret進行參數設置,而QQ平臺僅需將appID作為U-Share的appKey參數傳進即可。
*/
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_QQ appKey:@"100424468"/*設置QQ平臺的appID*/ appSecret:nil redirectURL:@"http://mobile.umeng.com/social"];
/* 設置新浪的appKey和appSecret */
[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_Sina appKey:@"3921700954" appSecret:@"04b48b094faeb16683c32669824ebdad" redirectURL:@"https://sns.whalecloud.com/sina2/callback"];
}
//設置系統回調
// 支持所有iOS系統
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
//6.3的新的API調用,是為了兼容國外平臺(例如:新版facebookSDK,VK等)的調用[如果用6.2的api調用會沒有回調],對國內平臺沒有影響
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
if (!result) {
// 其他如支付等SDK的回調
}
return result;
}
注:以上為建議使用的系統openURL回調,且 新浪 平臺僅支持以上回調。還有以下兩種回調方式,如果開發者選取以下回調,也請補充相應的函數調用。
僅支持iOS9以上系統,iOS8及以下系統不會回調
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
//6.3的新的API調用,是為了兼容國外平臺(例如:新版facebookSDK,VK等)的調用[如果用6.2的api調用會沒有回調],對國內平臺沒有影響
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url options:options];
if (!result) {
// 其他如支付等SDK的回調
}
return result;
}
2.支持目前所有iOS系統
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
BOOL result = [[UMSocialManager defaultManager] handleOpenURL:url];
if (!result) {
// 其他如支付等SDK的回調
}
return result;
}
7.重頭戲開始
在VC.m中
#import <UShareUI/UShareUI.h>
//在分享按鈕綁定如下觸發代碼
//顯示分享面板
[UMSocialUIManager showShareMenuViewInWindowWithPlatformSelectionBlock:^(UMSocialPlatformType platformType, NSDictionary *userInfo) {
// 根據獲取的platformType確定所選平臺進行下一步操作
[self shareWebPageToPlatformType:platformType];//新增代碼
}];
//定義實現的方法
- (void)shareWebPageToPlatformType:(UMSocialPlatformType)platformType
{
//創建分享消息對象
UMSocialMessageObject *messageObject = [UMSocialMessageObject messageObject];
//創建網頁內容對象
NSString* thumbURL = @"https://mobile.umeng.com/images/pic/home/social/img-1.png";
UMShareWebpageObject *shareObject = [UMShareWebpageObject shareObjectWithTitle:@"歡迎使用【友盟+】社會化組件U-Share" descr:@"歡迎使用【友盟+】社會化組件U-Share,SDK包最小,集成成本最低,助力您的產品開發、運營與推廣!" thumImage:thumbURL];
//設置網頁地址
shareObject.webpageUrl = @"http://mobile.umeng.com/social";
//分享消息對象設置分享內容對象
messageObject.shareObject = shareObject;
//調用分享接口
[[UMSocialManager defaultManager] shareToPlatform:platformType messageObject:messageObject currentViewController:self completion:^(id data, NSError *error) {
if (error) {
UMSocialLogInfo(@"************Share fail with error %@*********",error);
}else{
if ([data isKindOfClass:[UMSocialShareResponse class]]) {
UMSocialShareResponse *resp = data;
//分享結果消息
UMSocialLogInfo(@"response message is %@",resp.message);
//第三方原始返回的數據
UMSocialLogInfo(@"response originalResponse data is %@",resp.originalResponse);
}else{
UMSocialLogInfo(@"response data is %@",data);
}
}
DLog(@"分享出錯%@",error);//修改代碼
}];
}
次次先成功集成的是新浪微博。QQ可以,但微信還不可以 。
坑:微博分享直接跑網頁版,沒有拉起app,最后發現白名單不知道怎么回事漏了微博的。