原生分享(三):微博分享

如果覺得我寫的還不錯,請關注我的新浪微博@楊浩宇-小橘爺,最新文章即時推送~
原生分享(一):微信分享之搭建分享環境
原生分享(二):微信分享之使用分享

微博分享

書接上文,前兩篇博客我們介紹了如何使用微信的原生分享。但我還是那句話,我寫了原生的分享,但大家在做項目的時候千萬不要直接上原生,一定要用第三方!!!不然受苦受難的可是自己~

讓你的應用在微博開放平臺上運營,只需要通過簡單的六個步驟:

圖1-1 六個步驟

成為開發者&創建應用

這一部分涉及較少的技術性問題,請大家上新手指南進行查看。

其中還是有幾個需要注意的點:

  • 設定授權回調:請在“我的應用 - 應用信息 - 高級信息”中填寫您的應用回調 ,這樣才能使 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]。

圖1-2 設置URL Types

添加 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個文件。


圖1-3 添加SDK文件到工程

在工程中引入靜態庫之后,需要在編譯時添加 –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

圖1-4 添加FrameWork

定義常用的常量

定義應用 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;

這就是微博分享的環境搭建和基本使用的全部內容了,捎帶腳吐槽一句,微博的分享真難用啊,我就測試了幾次就說我賬號異常,我也是……

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容