為了方便第三方開發(fā)者快速簡單的集成國內(nèi)三大社交平臺(tái)(微信,QQ,微博),故造此輪子。
目前支持微信(微信好友,微信朋友圈),QQ,QQ空間,新浪微博)
關(guān)于此模塊的Bug反饋、建議、口水等等,請大家狠拍并提交到Github上,我會(huì)盡快解決。
該模塊會(huì)繼續(xù)完善優(yōu)化,爭取為大家提供一個(gè)更快速、更簡單、更規(guī)范、擴(kuò)展性更好的集成模塊。
特點(diǎn):
- 快速
- 簡單
- 易集成
- 支持網(wǎng)頁/SSO
- 擴(kuò)展性好
- 可定制
===
更新 Log
* 2015-09-29 修復(fù)網(wǎng)頁微博分享時(shí)內(nèi)容沒有傳入的 Bug
* 2015-10-29 適配 iOS 9 下分享
* 2015-11-04 新增三大平臺(tái)分享后的回調(diào)
* 2016-01-11 新增適配 iOS 9 SSO 的 `LSApplicationQueriesSchemes`配置說明
集成步驟
1. 下載微信、QQ、微博的社交sdk并導(dǎo)入至項(xiàng)目中
- 可在本頁下方參考資料中取得
2. 導(dǎo)入它們所需的系統(tǒng)framework與庫
程序 —— Targets —— Build Phases —— Link Binary With Libraries
Security.framework, SystemConfiguration.framework, CoreGraphics.framework, CoreTelephony.framework, QuartzCore.framework, ImageIO.framework, CoreText.framework, UIKit.framework, Foundation.framework, libsqlite3.dylib, libc++.dylib, libz.dylib, libstdc++.dylib, libiconv.dylib
- (具體可參考本頁底部參考資料鏈接)
3. 設(shè)置編譯選項(xiàng)
程序 —— Targets —— Build Settings —— Linking —— Other Linker Flag 添加 -ObjC
4. 設(shè)置URL Schema
- 程序 —— Targets —— Info —— URL Types
分別添加微信,QQ,微博
tencentopenapi : tencent222222
mqqapi : QQ0605C97A
weibo : wb2045436852
weixin : wxd930ea5d5a258f4f
以上均為測試app key,具體可以去對應(yīng)的開放平臺(tái)注冊
mqqapi 是 tencent 的 app key 轉(zhuǎn)十六進(jìn)制,不足八位在前面補(bǔ) 0 的結(jié)果
- 在 Info.plist 中添加
LSApplicationQueriesSchemes項(xiàng),
分別添加社交平臺(tái)的幾個(gè)白名單:
mqq
mqqopensdkapiV2
mqqapi
weibosdk2.5
weibosdk
weibo
weixin
wechat
具體列表請至獲取iOS 9 應(yīng)用跳轉(zhuǎn)適配
5. 導(dǎo)入XMShareView至項(xiàng)目中
XMShareView結(jié)構(gòu)介紹:
| 名稱 | 解釋 |
|---|---|
| CommonMarco.h | 通用宏文件,包含APP Key等宏 |
| ExtView/ | 擴(kuò)展View,VerticalUIButton為圖片文件垂直對齊按鈕 |
| Resource/ | 圖片等資源,包含微信、QQ、微博圖標(biāo) |
| ShareUtil/ | 分享工具類 |
| XMShareView.h | 分享顯示視圖 |
6. 在AppDelegate.m中注冊
- 導(dǎo)入文件頭
#import "WXApi.h"
#import <TencentOpenAPI/TencentOAuth.h>
#import "WeiboSDK.h"
- 在
application -> didFinishLaunchingWithOptions方法中注冊
[WXApi registerApp:APP_KEY_WEIXIN];
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:APP_KEY_WEIBO];
7. 在ViewController.m 中引用
-
導(dǎo)入文件頭
#import "XMShareView.h" 添加一個(gè)屬性
@property (nonatomic, strong) XMShareView *shareView;
- 在點(diǎn)擊分享的方法添加如下代碼:
if(!self.shareView){
self.shareView = [[XMShareView alloc] initWithFrame:self.view.bounds];
self.shareView.alpha = 0.0;
self.shareView.shareTitle = NSLocalizedString(@"分享標(biāo)題", nil);
self.shareView.shareText = NSLocalizedString(@"分享內(nèi)容", nil);
self.shareView.shareUrl = @"http://xumeng.github.com";
[self.view addSubview:self.shareView];
[UIView animateWithDuration:1 animations:^{
self.shareView.alpha = 1.0;
}];
}else{
[UIView animateWithDuration:1 animations:^{
self.shareView.alpha = 1.0;
}];
}
8. 處理 URL 跳轉(zhuǎn)
在 AppDelegate 類中實(shí)現(xiàn)兩個(gè)處理 URL 跳轉(zhuǎn)的方法。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
if ([[url absoluteString] hasPrefix:@"tencent"]) {
// return [TencentOAuth HandleOpenURL:url];
return [QQApiInterface handleOpenURL:url delegate:self];
}else if([[url absoluteString] hasPrefix:@"wb"]) {
return [WeiboSDK handleOpenURL:url delegate:self];
}else if([[url absoluteString] hasPrefix:@"wx"]) {
// 處理微信回調(diào)需要在具體的 ViewController 中處理。
ViewController *vc = (ViewController *)self.window.rootViewController;
return [WXApi handleOpenURL:url delegate:vc];
}
return NO;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if ([[url absoluteString] hasPrefix:@"tencent"]) {
return [TencentOAuth HandleOpenURL:url];
}else if([[url absoluteString] hasPrefix:@"wb"]) {
return [WeiboSDK handleOpenURL:url delegate:self];
}else{
ViewController *vc = (ViewController *)self.window.rootViewController;
return [WXApi handleOpenURL:url delegate:vc];
}
}
9. 處理分享后的回調(diào)
特別提醒:(下方方法體內(nèi)是示例代碼,具體業(yè)務(wù)邏輯請具體實(shí)現(xiàn))
- 微信分享:在具體的調(diào)用 ViewController 類里面實(shí)現(xiàn)微信
WXApiDelegate協(xié)議,然后實(shí)現(xiàn)以下方法:
- (void)onResp:(BaseResp *)resp
{
NSString *message;
if(resp.errCode == 0) {
message = @"分享成功";
}else{
message = @"分享失敗";
}
showAlert(message);
}
- QQ 分享:在
AppDelegate類中實(shí)現(xiàn)QQApiInterfaceDelegate協(xié)議,然后實(shí)現(xiàn)以下方法:
- (void)onResp:(QQBaseResp *)resp
{
NSString *message;
if([resp.result integerValue] == 0) {
message = @"分享成功";
}else{
message = @"分享失敗";
}
showAlert(message);
}
- 微博分享:在
AppDelegate類中實(shí)現(xiàn)WeiboSDKDelegate協(xié)議,然后實(shí)現(xiàn)以下方法:
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response
{
NSString *message;
switch (response.statusCode) {
case WeiboSDKResponseStatusCodeSuccess:
message = @"分享成功";
break;
case WeiboSDKResponseStatusCodeUserCancel:
message = @"取消分享";
break;
case WeiboSDKResponseStatusCodeSentFail:
message = @"分享失敗";
break;
default:
message = @"分享失敗";
break;
}
showAlert(message);
}