你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發之第三方分享QQ分享實現

iOS開發之第三方分享QQ分享實現

編輯:IOS開發綜合

本文章源碼地址:https://github.com/zhonggaorong/QQLoginDemo

分享第三方分享之QQ分享各種坑的總結:

1. 分享老是提示未注冊QQ,解決辦法就是在程序已啟動,就向QQ進行授權。代碼如下

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [[TencentOAuth alloc] initWithAppId:TENCENT_CONNECT_APP_KEY andDelegate:self];
    return YES;
}

 

 

QQ未注冊錯誤代號EQQAPIAPPNOTREGISTED

2. 分享的時候, 不跳轉到QQ界面,解決辦法就是在openurl中,添加如下代碼:

 

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{
    /**
     處理由手Q喚起的跳轉請求
     \param url 待處理的url跳轉請求
     \param delegate 第三方應用用於處理來至QQ請求及響應的委托對象
     \return 跳轉請求處理結果,YES表示成功處理,NO表示不支持的請求協議或處理失敗
     */
    if ([url.absoluteString hasPrefix:[NSString stringWithFormat:@"tencent%@",TENCENT_CONNECT_APP_KEY]]) {
        [QQApiInterface handleOpenURL:url delegate:self];
        return [TencentOAuth HandleOpenURL:url];
    }
    return YES;
}

 

 

3. iOS9白名單的問題,沒有吧QQ的相關白名單填完成。 完成的如下。

 

	LSApplicationQueriesSchemes
	
		mqqapi
		mqq
		mqqOpensdkSSoLogin
		mqqconnect
		mqqopensdkdataline
		mqqopensdkgrouptribeshare
		mqqopensdkfriend
		mqqopensdkapi
		mqqopensdkapiV2
		mqqopensdkapiV3
		mqzoneopensdk
		wtloginmqq
		wtloginmqq2
		mqqwpa
		mqzone
		mqzonev2
		mqzoneshare
		wtloginqzone
		mqzonewx
		mqzoneopensdkapiV2
		mqzoneopensdkapi19
		mqzoneopensdkapi
		mqzoneopensdk
	


 

進入正題:

 

分享的對象包含:

 

QQApiTextObject 文本對象

 

QQApiURLObject URL對象類型

QQApiExtendObject 擴展數據類型

 

QQApiImageObject 圖片對象

QQApiImageArrayForQZoneObject 圖片數組對象用於分享圖片到空間,走寫說說路徑,是一個指定為圖片類型的,當圖片數組為空時,默認走文本寫說說

 

QQApiVideoForQZoneObject 視頻對象

 

QQApiWebImageObject 網絡圖片對象

QQApiFileObject 本地文件對象

 

QQApiAudioObject 音頻URL對象

 

QQApiVideoObject 視頻URL對象:用於分享目標內容為視頻的URL的對象

 

QQApiNewsObject 新聞URL對象

等等。

 

相關的分享對象的權限看下圖:

\

分享的核心代碼為: (分享 新聞URL對象為例子)

 

/**  
     分享 新聞URL對象 。
     獲取一個autorelease的QQApiAudioObject
     @param url 音頻內容的目標URL
     @param title 分享內容的標題
     @param description 分享內容的描述
     @param previewURL 分享內容的預覽圖像URL
     @note 如果url為空,調用QQApi#sendMessage:時將返回FALSE
     */
    
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSURL *preimageUrl = [NSURL URLWithString:@"http://www.sizzee.com/index.php/catalog/product/view/id/55730/s/10196171/?SID=au0lhpg54f11nenmrjvhsh0rq6?uk=Y3VzdG9tZXJfaWQ9Mjc0fHByb2R1Y3RfaWQ9NTU3MzA"];
    QQApiNewsObject* img = [QQApiNewsObject objectWithURL:url title:@"測試分享" description:[NSString stringWithFormat:@"分享內容------新聞URL對象分享 ------test"] previewImageURL:preimageUrl];
    
    //請求幫助類,分享的所有基礎對象,都要封裝成這種請求對象。
    SendMessageToQQReq* req = [SendMessageToQQReq reqWithContent:img];
    QQApiSendResultCode sent = [QQApiInterface sendReq:req];
    
    //通過自定義的qqdelegate來通知本controller,是否成功分享
    appdelegate.qqDelegate = self;
    
    NSLog(@"QQApiSendResultCode %d",sent);
    
    [self handleSendResult:sent];
  /*  QQApiSendResultCode 說明
    EQQAPISENDSUCESS = 0,                      操作成功
    EQQAPIQQNOTINSTALLED = 1,                   沒有安裝QQ
    EQQAPIQQNOTSUPPORTAPI = 2,
    EQQAPIMESSAGETYPEINVALID = 3,              參數錯誤
    EQQAPIMESSAGECONTENTNULL = 4,
    EQQAPIMESSAGECONTENTINVALID = 5,
    EQQAPIAPPNOTREGISTED = 6,                   應用未注冊
    EQQAPIAPPSHAREASYNC = 7,
    EQQAPIQQNOTSUPPORTAPI_WITH_ERRORSHOW = 8,
    EQQAPISENDFAILD = -1,                       發送失敗
    //qzone分享不支持text類型分享
    EQQAPIQZONENOTSUPPORTTEXT = 10000,
    //qzone分享不支持image類型分享
    EQQAPIQZONENOTSUPPORTIMAGE = 10001,
    //當前QQ版本太低,需要更新至新版本才可以支持
    EQQAPIVERSIONNEEDUPDATE = 10002,
   */
}
- (void)handleSendResult:(QQApiSendResultCode)sendResult
{
    switch (sendResult)
    {
        case EQQAPIAPPNOTREGISTED:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"App未注冊" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIMESSAGECONTENTINVALID:
        case EQQAPIMESSAGECONTENTNULL:
        case EQQAPIMESSAGETYPEINVALID:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"發送參數錯誤" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIQQNOTINSTALLED:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"未安裝手Q" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIQQNOTSUPPORTAPI:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"API接口不支持" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPISENDFAILD:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"發送失敗" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIVERSIONNEEDUPDATE:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"當前QQ版本太低,需要更新" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            break;
        }
        default:
        {
            break;
        }
    }
}

 

 

上面提到了分享。那麼如何來監聽分享是否成功呢。這就要回到我們的appdelegate裡面。監聽

 

- (void)onResp:(QQBaseResp *)resp

appdelegate中的相關代碼如下:

 

 

**
 處理來至QQ的響應
 */
- (void)onResp:(QQBaseResp *)resp{
     NSLog(@" ----resp %@",resp);
    
    // SendMessageToQQResp應答幫助類
    if ([resp.class isSubclassOfClass: [SendMessageToQQResp class]]) {  //QQ分享回應
        if (_qqDelegate) {
            if ([_qqDelegate respondsToSelector:@selector(shareSuccssWithQQCode:)]) {
                SendMessageToQQResp *msg = (SendMessageToQQResp *)resp;
                NSLog(@"code %@  errorDescription %@  infoType %@",resp.result,resp.errorDescription,resp.extendInfo);
                [_qqDelegate shareSuccssWithQQCode:[msg.result integerValue]];
            }
        }
    }
}


 

 

完整的代碼如下

appdelegate.h

 

//
//  AppDelegate.h
//  QQLoginDemo
//
//  Created by 張國榮 on 16/6/17.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//

#import 

@protocol QQShareDelegate 

-(void)shareSuccssWithQQCode:(NSInteger)code;
@end

@interface AppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;
@property (weak  , nonatomic) id qqDelegate;

@end

 

appdelegate,m

 

//
//  AppDelegate.m
//  QQLoginDemo
//
//  Created by 張國榮 on 16/6/17.
//  Copyright © 2016年 BateOrganization. All rights reserved.
//

#import "AppDelegate.h"
#import 
#import 
#define TENCENT_CONNECT_APP_KEY @"app id"
@interface AppDelegate ()

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
//    [QQApiInterface ]
    
    [[TencentOAuth alloc] initWithAppId:TENCENT_CONNECT_APP_KEY andDelegate:self];
//    NSLog(@"%@",oauth.appId);
    return YES;
}

- (void)applicationWillResignActive:(UIApplication *)application {
    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}



-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
    /**
     處理由手Q喚起的跳轉請求
     \param url 待處理的url跳轉請求
     \param delegate 第三方應用用於處理來至QQ請求及響應的委托對象
     \return 跳轉請求處理結果,YES表示成功處理,NO表示不支持的請求協議或處理失敗
     */
    if ([url.absoluteString hasPrefix:[NSString stringWithFormat:@"tencent%@",TENCENT_CONNECT_APP_KEY]]) {
        [QQApiInterface handleOpenURL:url delegate:self];
        return [TencentOAuth HandleOpenURL:url];
        
    }
    return YES;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    /**
     處理由手Q喚起的跳轉請求
     \param url 待處理的url跳轉請求
     \param delegate 第三方應用用於處理來至QQ請求及響應的委托對象
     \return 跳轉請求處理結果,YES表示成功處理,NO表示不支持的請求協議或處理失敗
     */
    if ([url.absoluteString hasPrefix:[NSString stringWithFormat:@"tencent%@",TENCENT_CONNECT_APP_KEY]]) {
         [QQApiInterface handleOpenURL:url delegate:self];
        return [TencentOAuth HandleOpenURL:url];
        
    }
    return YES;
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{
    /**
     處理由手Q喚起的跳轉請求
     \param url 待處理的url跳轉請求
     \param delegate 第三方應用用於處理來至QQ請求及響應的委托對象
     \return 跳轉請求處理結果,YES表示成功處理,NO表示不支持的請求協議或處理失敗
     */
    if ([url.absoluteString hasPrefix:[NSString stringWithFormat:@"tencent%@",TENCENT_CONNECT_APP_KEY]]) {
        [QQApiInterface handleOpenURL:url delegate:self];
        return [TencentOAuth HandleOpenURL:url];
    }
    return YES;
}
/**
 處理來至QQ的請求
 */
- (void)onReq:(QQBaseReq *)req{
    NSLog(@" ----req %@",req);
}

/**
 處理來至QQ的響應
 */
- (void)onResp:(QQBaseResp *)resp{
     NSLog(@" ----resp %@",resp);
    
    // SendMessageToQQResp應答幫助類
    if ([resp.class isSubclassOfClass: [SendMessageToQQResp class]]) {  //QQ分享回應
        if (_qqDelegate) {
            if ([_qqDelegate respondsToSelector:@selector(shareSuccssWithQQCode:)]) {
                SendMessageToQQResp *msg = (SendMessageToQQResp *)resp;
                NSLog(@"code %@  errorDescription %@  infoType %@",resp.result,resp.errorDescription,resp.extendInfo);
                [_qqDelegate shareSuccssWithQQCode:[msg.result integerValue]];
            }
        }
    }
}

/**
 處理QQ在線狀態的回調
 */
- (void)isOnlineResponse:(NSDictionary *)response{

}


@end

 

viewcontroller.h

 

#import 

@interface ViewController : UIViewController


@end

 

viewcontroller.m

 

#import "ViewController.h"
#import 
#import 
#import 
#import 
#import "AppDelegate.h"

#define APP_ID @"app id"
@interface ViewController ()
{
    TencentOAuth *_tencentOAuth;
    NSMutableArray *_permissionArray;   //權限列表
    AppDelegate *appdelegate;
}
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
    self.view.backgroundColor = [UIColor whiteColor];
}

#pragma mark QQ登錄
- (IBAction)loginAction:(id)sender {
    _tencentOAuth=[[TencentOAuth alloc]initWithAppId:APP_ID andDelegate:self];
    
    //設置權限數據 , 具體的權限名,在sdkdef.h 文件中查看。
    _permissionArray = [NSMutableArray arrayWithObjects: kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];
    
    //登錄操作
    [_tencentOAuth authorize:_permissionArray inSafari:NO];
}

/**
 * 登錄成功後的回調
 */
- (void)tencentDidLogin{
    
    /** Access Token憑證,用於後續訪問各開放接口 */
    if (_tencentOAuth.accessToken) {
        
        //獲取用戶信息。 調用這個方法後,qq的sdk會自動調用
        //- (void)getUserInfoResponse:(APIResponse*) response
        //這個方法就是 用戶信息的回調方法。
        
        [_tencentOAuth getUserInfo];
    }else{
    
        NSLog(@"accessToken 沒有獲取成功");
    }
    
}

/**
 * 登錄失敗後的回調
 * \param cancelled 代表用戶是否主動退出登錄
 */
- (void)tencentDidNotLogin:(BOOL)cancelled{
    if (cancelled) {
        NSLog(@" 用戶點擊取消按鍵,主動退出登錄");
    }else{
        NSLog(@"其他原因, 導致登錄失敗");
    }
}

/**
 * 登錄時網絡有問題的回調
 */
- (void)tencentDidNotNetWork{
    NSLog(@"沒有網絡了, 怎麼登錄成功呢");
}


/**
 * 因用戶未授予相應權限而需要執行增量授權。在用戶調用某個api接口時,如果服務器返回操作未被授權,則觸發該回調協議接口,由第三方決定是否跳轉到增量授權頁面,讓用戶重新授權。
 * \param tencentOAuth 登錄授權對象。
 * \param permissions 需增量授權的權限列表。
 * \return 是否仍然回調返回原始的api請求結果。
 * \note 不實現該協議接口則默認為不開啟增量授權流程。若需要增量授權請調用\ref TencentOAuth#incrAuthWithPermissions: \n注意:增量授權時用戶可能會修改登錄的帳號
 */
- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions{
    
    // incrAuthWithPermissions是增量授權時需要調用的登錄接口
    // permissions是需要增量授權的權限列表
    [tencentOAuth incrAuthWithPermissions:permissions];
    return NO; // 返回NO表明不需要再回傳未授權API接口的原始請求結果;
    // 否則可以返回YES
}

/**
 * [該邏輯未實現]因token失效而需要執行重新登錄授權。在用戶調用某個api接口時,如果服務器返回token失效,則觸發該回調協議接口,由第三方決定是否跳轉到登錄授權頁面,讓用戶重新授權。
 * \param tencentOAuth 登錄授權對象。
 * \return 是否仍然回調返回原始的api請求結果。
 * \note 不實現該協議接口則默認為不開啟重新登錄授權流程。若需要重新登錄授權請調用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登錄授權時用戶可能會修改登錄的帳號
 */
- (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth{
    return YES;
}

/**
 * 用戶通過增量授權流程重新授權登錄,token及有效期限等信息已被更新。
 * \param tencentOAuth token及有效期限等信息更新後的授權實例對象
 * \note 第三方應用需更新已保存的token及有效期限等信息。
 */
- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth{
    NSLog(@"增量授權完成");
    if (tencentOAuth.accessToken
        && 0 != [tencentOAuth.accessToken length])
    { // 在這裡第三方應用需要更新自己維護的token及有效期限等信息
        // **務必在這裡檢查用戶的openid是否有變更,變更需重新拉取用戶的資料等信息** _labelAccessToken.text = tencentOAuth.accessToken;
    }
    else
    {
        NSLog(@"增量授權不成功,沒有獲取accesstoken");
    }

}

/**
 * 用戶增量授權過程中因取消或網絡問題導致授權失敗
 * \param reason 授權失敗原因,具體失敗原因參見sdkdef.h文件中\ref UpdateFailType
 */
- (void)tencentFailedUpdate:(UpdateFailType)reason{
    
    switch (reason)
    {
        case kUpdateFailNetwork:
        {
            //            _labelTitle.text=@"增量授權失敗,無網絡連接,請設置網絡";
            NSLog(@"增量授權失敗,無網絡連接,請設置網絡");
            break;
        }
        case kUpdateFailUserCancel:
        {
            //            _labelTitle.text=@"增量授權失敗,用戶取消授權";
            NSLog(@"增量授權失敗,用戶取消授權");
            break;
        }
        case kUpdateFailUnknown:
        default:
        {
            NSLog(@"增量授權失敗,未知錯誤");
            break;
        }
    }

    
}

#pragma mark 登錄成功後,回調 - 返回對應QQ的相關信息
/**
 * 獲取用戶個人信息回調
 * \param response API返回結果,具體定義參見sdkdef.h文件中\ref APIResponse
 * \remarks 正確返回示例: \snippet example/getUserInfoResponse.exp success
 *          錯誤返回示例: \snippet example/getUserInfoResponse.exp fail
 */
- (void)getUserInfoResponse:(APIResponse*) response{
    
    //這裡 與自己服務器進行對接,看怎麼利用這獲取到的個人信息。
    
    NSDictionary *dic = response.jsonResponse;
    NSLog(@" response %@",dic);
    
    
}

#pragma mark QQ分享
- (IBAction)QQshareAction:(id)sender {
    /**  
     分享 新聞URL對象 。
     獲取一個autorelease的QQApiAudioObject
     @param url 音頻內容的目標URL
     @param title 分享內容的標題
     @param description 分享內容的描述
     @param previewURL 分享內容的預覽圖像URL
     @note 如果url為空,調用QQApi#sendMessage:時將返回FALSE
     */
    
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    NSURL *preimageUrl = [NSURL URLWithString:@"http://www.sizzee.com/index.php/catalog/product/view/id/55730/s/10196171/?SID=au0lhpg54f11nenmrjvhsh0rq6?uk=Y3VzdG9tZXJfaWQ9Mjc0fHByb2R1Y3RfaWQ9NTU3MzA"];
    QQApiNewsObject* img = [QQApiNewsObject objectWithURL:url title:@"測試分享" description:[NSString stringWithFormat:@"分享內容------新聞URL對象分享 ------test"] previewImageURL:preimageUrl];
    
    //請求幫助類,分享的所有基礎對象,都要封裝成這種請求對象。
    SendMessageToQQReq* req = [SendMessageToQQReq reqWithContent:img];
    QQApiSendResultCode sent = [QQApiInterface sendReq:req];
    
    //通過自定義的qqdelegate來通知本controller,是否成功分享
    appdelegate.qqDelegate = self;
    
    NSLog(@"QQApiSendResultCode %d",sent);
    
    [self handleSendResult:sent];
  /*  QQApiSendResultCode 說明
    EQQAPISENDSUCESS = 0,                      操作成功
    EQQAPIQQNOTINSTALLED = 1,                   沒有安裝QQ
    EQQAPIQQNOTSUPPORTAPI = 2,
    EQQAPIMESSAGETYPEINVALID = 3,              參數錯誤
    EQQAPIMESSAGECONTENTNULL = 4,
    EQQAPIMESSAGECONTENTINVALID = 5,
    EQQAPIAPPNOTREGISTED = 6,                   應用未注冊
    EQQAPIAPPSHAREASYNC = 7,
    EQQAPIQQNOTSUPPORTAPI_WITH_ERRORSHOW = 8,
    EQQAPISENDFAILD = -1,                       發送失敗
    //qzone分享不支持text類型分享
    EQQAPIQZONENOTSUPPORTTEXT = 10000,
    //qzone分享不支持image類型分享
    EQQAPIQZONENOTSUPPORTIMAGE = 10001,
    //當前QQ版本太低,需要更新至新版本才可以支持
    EQQAPIVERSIONNEEDUPDATE = 10002,
   */
}
- (void)handleSendResult:(QQApiSendResultCode)sendResult
{
    switch (sendResult)
    {
        case EQQAPIAPPNOTREGISTED:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"App未注冊" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIMESSAGECONTENTINVALID:
        case EQQAPIMESSAGECONTENTNULL:
        case EQQAPIMESSAGETYPEINVALID:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"發送參數錯誤" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIQQNOTINSTALLED:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"未安裝手Q" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIQQNOTSUPPORTAPI:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"API接口不支持" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPISENDFAILD:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"發送失敗" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            
            
            break;
        }
        case EQQAPIVERSIONNEEDUPDATE:
        {
            UIAlertView *msgbox = [[UIAlertView alloc] initWithTitle:@"Error" message:@"當前QQ版本太低,需要更新" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:nil];
            [msgbox show];
            break;
        }
        default:
        {
            break;
        }
    }
}

#pragma mark QQ分享回調代理
/* 返回碼 對照說明
 0   成功
 -1  參數錯誤
 -2  該群不在自己的群列表裡面
 -3  上傳圖片失敗
 -4  用戶放棄當前操作
 -5  客戶端內部處理錯誤
 */
-(void)shareSuccssWithQQCode:(NSInteger)code{
    NSLog(@"code %ld",(long)code);
    if (code == 0) {
        UIAlertView *aler = [[UIAlertView alloc]initWithTitle:@"警告" message:@"分享成功" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
        [aler show];
    }else{
        UIAlertView *aler = [[UIAlertView alloc]initWithTitle:@"警告" message:@"分享失敗" delegate:self cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
        [aler show];
    }
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

 

大功告成。

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved