Swift中實現QQ分享完畢後的回調響應(判斷是否分享成功)

來源:互聯網
上載者:User

我之前寫過一篇關於調用QQ分享的文章:Swift - 騰訊官方SDK的配置及使用(分享到QQ空間、分享到好友)。通過使用騰訊提供的 SDK,我們可以從自己的 App 跳轉到手機 QQ,將訊息分享給QQ 好友或發布到空間上。
    

通過 QQApiInterface.send() 方法發送訊息後,根據返回 QQApiSendResultCode 類型的結果。我們可以判斷 QQ 是否調用成功。沒調用成功的話還能得到具體錯誤原因(API 不支援、還是 QQ 沒安裝等等)
除了判斷調用是否成功,我們有時還會需要知道發送的結果,這樣根據使用者分享結果進行不同的處理。本文示範如何通過委託響應,捕獲訊息分享的結果。

1,範例效果圖

當分享訊息完畢,返回應用時,我們應用中會顯示是否分享成功的提示。如果分享失敗,還會附帶上失敗原因。

2,範例代碼

(1)ViewController.swift

分享相關的代碼與前文一樣,這裡就不再寫了。點擊查看詳細代碼

(2)AppDelegate.swift

我們在 AppDelegate 中除了要重寫 open url 方法,還要添加 QQApiInterfaceDelegate 代理,並實現相關的代理方法。這樣當訊息發送完畢後,我們可以在回調方法中進行需要的操作。


import UIKit
 
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, QQApiInterfaceDelegate  {
 
    var window: UIWindow?
    
    //重寫openURL
    func application(_ app: UIApplication, open url: URL,
                     options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        QQApiInterface.handleOpen(url, delegate: self)
        return TencentOAuth.handleOpen(url)
    }
    
    //處理來至QQ的響應
    func onResp(_ resp: QQBaseResp!) {
        print("--- onResp ---")
        //確保是對我們QQ分享操作的回調
        if resp.isKind(of: SendMessageToQQResp.self) {
            //QQApi應答訊息類型判斷(手Q -> 第三方應用,手Q應答處理分享訊息的結果)
            if uint(resp.type) == ESENDMESSAGETOQQRESPTYPE.rawValue {
                let title = resp.result == "0" ? "分享成功" : "分享失敗"
                var message = ""
                switch(resp.result){
                case "-1":
                    message = "參數錯誤"
                case "-2":
                    message = "該群不在自己的群列表裡面"
                case "-3":
                    message = "上傳圖片失敗"
                case "-4":
                    message = "使用者放棄當前操作"
                case "-5":
                    message = "用戶端內部處理錯誤"
                default: //0
                    //message = "成功"
                    break
                }
 
                //顯示訊息
                showAlert(title: title, message: message)
            }
        }
    }
    
    //處理來至QQ的請求
    func onReq(_ req:QQBaseReq!){
        print("--- onReq ---")
    }
    
    //處理QQ線上狀態的回調
    func isOnlineResponse(_ response: [AnyHashable : Any]!) {
        print("--- isOnlineResponse ---")
    }
    
    //顯示訊息
    func showAlert(title:String, message:String){
        let alertController = UIAlertController(title: title,
            message: message, preferredStyle: .alert)
        let cancelAction = UIAlertAction(title: "確定", style: .cancel, handler: nil)
        alertController.addAction(cancelAction)
        self.window?.rootViewController!.present(alertController, animated: true,
                                                 completion: nil)
    }
    
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions:
        [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        return true
    }
 
    func applicationWillResignActive(_ application: UIApplication) {
    }
 
    func applicationDidEnterBackground(_ application: UIApplication) {
    }
 
    func applicationWillEnterForeground(_ application: UIApplication) {
    }
 
    func applicationDidBecomeActive(_ application: UIApplication) {
    }
 
    func applicationWillTerminate(_ application: UIApplication) {
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.