如果覺得我寫的還不錯,請關注我的新浪微博@楊浩宇-小橘爺,最新文章即時推送~
原生分享(一):微信分享之搭建分享環境
原生分享(二):微信分享之使用分享
微博分享
書接上文,前兩篇博客我們介紹了如何使用微信的原生分享。但我還是那句話,我寫了原生的分享,但大家在做項目的時候千萬不要直接上原生,一定要用第三方!??!不然受苦受難的可是自己~
讓你的應用在微博開放平臺上運營,只需要通過簡單的六個步驟:
成為開發者&創建應用
這一部分涉及較少的技術性問題,請大家上新手指南進行查看。
其中還是有幾個需要注意的點:
- 設定授權回調:請在“我的應用 - 應用信息 - 高級信息”中填寫您的應用回調 ,這樣才能使 OAuth2.0 授權正常進行 。如果您的APPSECRET發生泄露,您也可以通過該頁面中的重置按鈕對其重置。注意: iOS 應用推薦使用默認授權回調頁!地址為:https://api.weibo.com/oauth2/default.html。
- 設定 Apple ID 和 Bundle ID:請在“我的應用 - 應用信息 - 基本信息”中填寫您的 Apple ID 和 Bundle ID,這樣您的應用才能正常使用微博 iOS SDK 授權和回調。(更改設置有延時,建議退出賬號重新登錄后再測試)。注: Apple ID 如果沒有的話,先隨意填寫,當獲取了合法的 Apple ID 之后請馬上到這個頁面修改為正式版本。Bundle ID 需要和工程設置保證一致。
設置工程回調 URL Types
如下圖所示:其中 Identifier 應為自己的 SSO 授權回調地址,URL Scheme 則為 WB[APP KEY]。
添加 SDK 文件到工程
將從 GitHub 上下載的 libWeiboSDK 文件夾添加到工程,其中包含 WeiboSDK.h、WeiboUser.h、WBHttpRequest.h、WBHttpRequest+WeiboUser.h、WBHttpRequest+WeiboShare.h、WBHttpRequest+WeiboToken.h、WBSDKBasicButton.h、WBSDKRelationshipButton.h、WBSDKCommentButton.h、WeiboSDK+Statistics.h 這10個.h文件以及 libWeiboSDK.a 和 WeiboSDK.bundle,統共12個文件。
在工程中引入靜態庫之后,需要在編譯時添加 –ObjC 編譯選項,避免靜態庫中類加載不全造成程序崩潰。
方法:程序 Target->Buid Settings->Linking 下 OtherLinker Flags 項添加 -ObjC。
添加 Framework 文件到工程
在工程中修改 Other Linker Flags 后,需要修改編譯步驟的鏈接庫設置,避免鏈接階段由于庫的設置錯誤導致程序崩潰。
方法:程序 Target->Buid Phases->Link BinaryWith Libraries 下添加以下 Framework 到工程中。需要添加的 Frameworks 為:QuartzCore.framework、ImageIO.framework、SystemConfiguration.framework、Security.framework、CoreTelephony.framework、CoreText.framework、UIKit.framework、Foundation.framework、CoreGraphics.framework 、libz.dylib、libsqlite3.dylib
定義常用的常量
定義應用 SSO 登錄或者 Oauth2.0 認證所需的幾個常量。
AppKey:第三方應用申請的 AppKey, 來身份鑒證、顯示來源等;
AppRedirectURL: 應用回調 ,在進行 Oauth2.0 登錄認證時所使用 。對于 Mobile 客戶端應用來說,是不存在 Server 的,故此處的應用回調地址只要與新浪微博開放平臺->我的應用 ->應用信息-> 高級應用 ->授權設置->應用回調中的 url 地址保持一致就可以了,如下所示:
#define kAppKey @"2045436852"
#define kRedirectURI @"http://www.sina.com"
注冊 AppKey (ClientID)
程序啟動時,在代碼中向微博終端注冊你的 AppKey,如果初次集成微博 SDK,建議打開調試選項以便輸出調試信息。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:kAppKey];
return YES;
}
重寫 AppDelegate 的 handleOpenURL 和 openURL 方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [WeiboSDK handleOpenURL:url delegate:self];
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [WeiboSDK handleOpenURL:url delegate:self ];
}
至此,微博 SDK 的導入和初始化工作就都完成了~
- (void)shareButtonPressed
{
// 獲取AppDelegate
AppDelegate myDelegate =(AppDelegate)[[UIApplication sharedApplication] delegate];
/**
第三方應用向微博客戶端請求認證的消息結構
第三方應用向微博客戶端申請認證時,需要調用[WeiboSDK sendRequest:]函數, 向微博客戶端發送一個WBAuthorizeRequest的消息結構。
微博客戶端處理完后會向第三方應用發送一個結構為 WBAuthorizeResponse 的處理結果。
*/
WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
// 微博開放平臺第三方應用授權回調頁地址,默認為`http://`
authRequest.redirectURI = kRedirectURI;
// 微博開放平臺第三方應用 scope,多個 scope 用逗號分隔
authRequest.scope = @"all";
// 第三方應用發送消息至微博客戶端程序的消息結構體,其中 message 類型我會在下面放出
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:[self messageToShare] authInfo:authRequest access_token:myDelegate.wbtoken];
// 自定義信息字典,用于數據傳輸過程中存儲相關的上下文環境數據
// 第三方應用給微博客戶端程序發送 request 時,可以在 userInfo 中存儲請求相關的信息。
request.userInfo = @{@"ShareMessageFrom": @"SendMessageToWeiboViewController",
@"Other_Info_1": [NSNumber numberWithInt:123],
@"Other_Info_2": @[@"obj1", @"obj2"],
@"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}};
// 發送請求給微博客戶端程序,并切換到微博
// 請求發送給微博客戶端程序之后,微博客戶端程序會進行相關的處理,處理完成之后一定會調用 [WeiboSDKDelegate didReceiveWeiboResponse:] 方法將處理結果返回給第三方應用
[WeiboSDK sendRequest:request];
}
文字類型的消息格式
// 微博客戶端程序和第三方應用之間傳遞的消息結構
// 一個消息結構由三部分組成:文字、圖片和多媒體數據。三部分內容中至少有一項不為空,圖片和多媒體數據不能共存。
WBMessageObject *message = [WBMessageObject message];
message.text = NSLocalizedString(@"測試通過WeiboSDK發送文字到微博!", nil);
圖片類型的消息格式
WBMessageObject *message = [WBMessageObject message];
// 消息中包含的圖片數據對象
WBImageObject *image = [WBImageObject object];
// 圖片真實數據內容
image.imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image_1" ofType:@"jpg"]];
// 消息的圖片內容
message.imageObject = image;
網頁類型的消息格式
WBMessageObject *message = [WBMessageObject message];
// 消息中包含的網頁數據對象
WBWebpageObject *webpage = [WBWebpageObject object];
// 對象唯一ID,用于唯一標識一個多媒體內容
// 當第三方應用分享多媒體內容到微博時,應該將此參數設置為被分享的內容在自己的系統中的唯一標識
webpage.objectID = @"identifier1";
webpage.title = NSLocalizedString(@"分享網頁標題", nil);
webpage.description = [NSString stringWithFormat:NSLocalizedString(@"分享網頁內容簡介-%.0f", nil), [[NSDate date] timeIntervalSince1970]];
// 多媒體內容縮略圖
webpage.thumbnailData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image_2" ofType:@"jpg"]];
// 網頁的url地址
webpage.webpageUrl = @"http://sina.cn?a=1";
// 消息的多媒體內容
message.mediaObject = webpage;
這就是微博分享的環境搭建和基本使用的全部內容了,捎帶腳吐槽一句,微博的分享真難用啊,我就測試了幾次就說我賬號異常,我也是……