iOS9中實現微信分享到好友、朋友圈
- 微信SDKdemo執行錯誤問題
- 微信SDK接入設定
- 實現分享到好友、朋友圈
微信SDKdemo執行錯誤問題
下載了官方的demo,激動地運行了一下,十幾個錯誤,內心其實是崩潰的。
根據錯誤提示,去修改architecture,然並卵,幾經周折,終於發現問題所在!進入工程->targets->Build Phases->Link Binary With Libraries 新增Security.framework,OK,編譯執行成功。
微信SDK接入
做分享的時候,不想用第三方分享平臺的話,自己實現也是比較有趣的,接下來假設你已經註冊成為微信開放平臺的開發者,且為你的APP申請到AppID和AppSecret。如果沒有,請戳:1.註冊微信平臺開發者:
做好準備好工作後,從官網下載最新的WeChatSDK,本文使用的是WeChatSDK1.6.2,解壓之後裡面將資料夾拖入工程中,記得勾選Copy items if needed。
接下來,首先新增sdk所需要連結的.a檔案,進入 工程->targets->Build Phases->Link Binary With Libraries 點選 +,選中Add others…, 選中SDK資料夾中libWeChatSDK.a 確定即可。其次新增所需要的frameworks,完成如下圖(注意新增libc++.tdb,官方文件缺少):
另,iOS中程式之間都是相互隔離,跳轉到其他APP使用的是URL Scheme,進入 Targets -> info設定LSApplicationQueriesSchemes(型別NSArray),新增weixin,如下圖:
編譯一下,出現如下提示:
這是因為iOS9引入了新特性App Transport Security (ATS),即要求APP內部訪問的網路必須使用Https協議,但微信的SDK使用的仍然是Http,需要進入 Targets -> info設定App Transport Security Settings(型別Dictionary),在NSAppTransportSecurity下新增Allow Arbitrary Loads(型別 Boolean)值為YES。如下圖:
編譯一下成功!
實現分享到好友、朋友圈
說了這麼多,該進入程式碼實現了。在APPdelegate註冊微信
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[WXApi registerApp:@"your APPID"];
return YES;
}
你可以通過[WXApi isWXAppInstalled]、[WXApi isWXAppSupportApi]判斷出使用者是否安裝微信、微信是否支援API,做出相應的操作。
我們的APP要想開啟微信,遵循微信代理WXApiDelegate,重寫application: openURL:options:方法,設定微信代理:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
return [WXApi handleOpenURL:url delegate:self];
}
#pragma mark -WXApiDelegate協議方法
- (void) onReq:(BaseReq *)req {
}
- (void) onResp:(BaseResp *)resp {
}
協議方法具體使用,請自行command或參考官方demo。接下來可以實現分享,在.m檔案中 #import “WXApiObject.h” #import “WXApi.h”。筆者寫了兩個按鈕點選事件,專案中看具體的需求了,響應事件如下:
- (void)shareToTimeline {
NSLog(@"分享到朋友圈");
SendMessageToWXReq * req = [[SendMessageToWXReq alloc] init];
req.text = @"看我看我。。。";
req.bText = YES;
req.scene = WXSceneTimeline;
[WXApi sendReq:req];
}
- (void)shareToSession {
NSLog(@"分享到好友");
WXMediaMessage *message = [WXMediaMessage message];
[message setThumbImage:[UIImage imageNamed:@"res5thumb.png"]];
WXWebpageObject *ext = [WXWebpageObject object];
ext.webpageUrl = @"http://cul.qq.com/a/20160226/009086.htm?pgv_ref=aio2015&ptlang=2052#p=1";
message.mediaObject = ext;
message.title = @"點開看看,有驚喜";
message.description = @"揭古代妃子阿哥真實照 樣貌醜氣質差引吐槽";
SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = WXSceneSession;
[WXApi sendReq:req];
}
聰明的小夥伴會發現SendMessageToWXReq的物件的secne屬性是傳送的目標場景,可以選擇傳送到會話(WXSceneSession)或者朋友圈(WXSceneTimeline)。 這個屬性預設傳送到會話。
分享的內容和場景可以根據需求設定SendMessageToWXReq的物件屬性實現啦,暫寫到這裡了。
第一次嘗試寫部落格,很多地方很蹩腳,請各位多多指教!謝謝!