1. 程式人生 > >iOS9中實現微信分享到好友、朋友圈

iOS9中實現微信分享到好友、朋友圈

  • 微信SDKdemo執行錯誤問題
  • 微信SDK接入設定
  • 實現分享到好友、朋友圈

微信SDKdemo執行錯誤問題
下載了官方的demo,激動地運行了一下,十幾個錯誤,內心其實是崩潰的。
這裡寫圖片描述
根據錯誤提示,去修改architecture,然並卵,幾經周折,終於發現問題所在!進入工程->targets->Build Phases->Link Binary With Libraries 新增Security.framework,OK,編譯執行成功。
這裡寫圖片描述
微信SDK接入
做分享的時候,不想用第三方分享平臺的話,自己實現也是比較有趣的,接下來假設你已經註冊成為微信開放平臺的開發者,且為你的APP申請到AppID和AppSecret。如果沒有,請戳:1.註冊微信平臺開發者:

http://jingyan.baidu.com/article/3052f5a1c8090397f31f8620.html 2.建立APP:http://jingyan.baidu.com/article/c45ad29c35d938051653e257.html
做好準備好工作後,從官網下載最新的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的物件屬性實現啦,暫寫到這裡了。
第一次嘗試寫部落格,很多地方很蹩腳,請各位多多指教!謝謝!