转载请标明:转载自【小枫栏目】,博文链接:http://blog.csdn.net/rexuefengye/article/details/9833851
简介
本文档主要介绍接入QQ平台的一些内容,便于查阅和使用。
第一步:搭建QQSDK
1.下载对应的 SDK, 将sdk这个目录添加到工程中,这样可以在代码中使用QQAPI了。本人选择如下iOS SDK,如下图
2.下载SDK后,打开文件如图:
3.打开《iOS SDK使用说明(MAC).webloc》按流程搭建好SDK。
1.更改类
AppController.mm
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
- return [TencentOAuth HandleOpenURL:url];
- }
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
- return [TencentOAuth HandleOpenURL:url];
- }
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{return [TencentOAuth HandleOpenURL:url];
}- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{return [TencentOAuth HandleOpenURL:url];
}
2.添加类
sdkCall.h
sdkCall.h
- #import <Foundation/Foundation.h>
- #import <TencentOpenAPI/TencentOAuth.h>
- @interface sdkCall : NSObject<TencentSessionDelegate, TencentApiInterfaceDelegate>
- @property (nonatomic, retain)TencentOAuth *tencentOAuth;
- @property (retain, nonatomic) UITextView *labelTitle;
- @property (retain, nonatomic) UITextView *labelAccessToken;
- @property (retain, nonatomic) NSArray* permissions;
- @end
#import <Foundation/Foundation.h>
#import <TencentOpenAPI/TencentOAuth.h>@interface sdkCall : NSObject<TencentSessionDelegate, TencentApiInterfaceDelegate>
@property (nonatomic, retain)TencentOAuth *tencentOAuth;
@property (retain, nonatomic) UITextView *labelTitle;
@property (retain, nonatomic) UITextView *labelAccessToken;
@property (retain, nonatomic) NSArray* permissions;
@end
sdkCall.m
- //
- // sdkCall.m
- // QQLogin
- //
- // Created by IDEA-MAC03 on 13-8-7.
- //
- //
- #import "sdkCall.h"
- static sdkCall *g_instance = nil;
- @implementation sdkCall
- + (sdkCall *)getinstance
- {
- @synchronized(self)
- {
- if (nil == g_instance)
- {
- //g_instance = [[sdkCall alloc] init];
- g_instance = [[super allocWithZone:nil] init];
- // [g_instance setPhotos:[NSMutableArray arrayWithCapacity:1]];
- // [g_instance setThumbPhotos:[NSMutableArray arrayWithCapacity:1]];
- }
- }
- return g_instance;
- }
- + (id)allocWithZone:(NSZone *)zone
- {
- return [[self getinstance] retain];
- }
- -(id)init
- {
- _tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];
- _tencentOAuth.redirectURI = @"www.qq.com";
- //_permissions = [[NSArray arrayWithObjects:@"get_user_info", @"add_share", nil] retain];
- return self;
- }
- //登录时,调用TencetnOAuth对象的authorize方法:
- -(void)login
- {
- NSArray* permissions = [NSArray arrayWithObjects:
- kOPEN_PERMISSION_GET_USER_INFO,
- kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,
- kOPEN_PERMISSION_ADD_ALBUM,
- kOPEN_PERMISSION_ADD_IDOL,
- kOPEN_PERMISSION_ADD_ONE_BLOG,
- kOPEN_PERMISSION_ADD_PIC_T,
- kOPEN_PERMISSION_ADD_SHARE,
- kOPEN_PERMISSION_ADD_TOPIC,
- kOPEN_PERMISSION_CHECK_PAGE_FANS,
- kOPEN_PERMISSION_DEL_IDOL,
- kOPEN_PERMISSION_DEL_T,
- kOPEN_PERMISSION_GET_FANSLIST,
- kOPEN_PERMISSION_GET_IDOLLIST,
- kOPEN_PERMISSION_GET_INFO,
- kOPEN_PERMISSION_GET_OTHER_INFO,
- kOPEN_PERMISSION_GET_REPOST_LIST,
- kOPEN_PERMISSION_LIST_ALBUM,
- kOPEN_PERMISSION_UPLOAD_PIC,
- kOPEN_PERMISSION_GET_VIP_INFO,
- kOPEN_PERMISSION_GET_VIP_RICH_INFO,
- kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO,
- kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO,
- nil];
- [_tencentOAuth authorize:permissions inSafari:NO];
- //[[[sdkCall getinstance] _tencentOAuth] authorize:permissions inSafari:NO];
- }
- //登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。 登录成功:
- -(void)tencentDidLogin
- {
- _labelTitle.text = @"登录完成";
- if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]) {
- // 记录登录用户的OpenID、Token以及过期时间
- _labelAccessToken.text = _tencentOAuth.accessToken;
- NSLog(@"*********************");
- NSLog(_tencentOAuth.accessToken);
- }
- else
- {
- _labelAccessToken.text = @"登录不成功 没有获取accesstoken";
- }
- }
- //非网络错误导致登录失败:
- -(void)tencentDidNotLogin:(BOOL)cancelled
- {
- if (cancelled)
- {
- _labelTitle.text = @"用户取消登录";
- }
- else
- {
- _labelTitle.text = @"登录失败";
- }
- }
- //网络错误导致登录失败:
- -(void)tencentDidNotNetWork
- {
- _labelTitle.text=@"无网络连接,请设置网络";
- }
- - (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth
- {
- }
- @end
//
// sdkCall.m
// QQLogin
//
// Created by IDEA-MAC03 on 13-8-7.
//
//#import "sdkCall.h"
static sdkCall *g_instance = nil;@implementation sdkCall+ (sdkCall *)getinstance
{@synchronized(self){if (nil == g_instance){//g_instance = [[sdkCall alloc] init];g_instance = [[super allocWithZone:nil] init];// [g_instance setPhotos:[NSMutableArray arrayWithCapacity:1]];// [g_instance setThumbPhotos:[NSMutableArray arrayWithCapacity:1]];}}return g_instance;
}+ (id)allocWithZone:(NSZone *)zone
{return [[self getinstance] retain];
}-(id)init
{_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];_tencentOAuth.redirectURI = @"www.qq.com";//_permissions = [[NSArray arrayWithObjects:@"get_user_info", @"add_share", nil] retain];return self;
}//登录时,调用TencetnOAuth对象的authorize方法:
-(void)login
{NSArray* permissions = [NSArray arrayWithObjects:kOPEN_PERMISSION_GET_USER_INFO,kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,kOPEN_PERMISSION_ADD_ALBUM,kOPEN_PERMISSION_ADD_IDOL,kOPEN_PERMISSION_ADD_ONE_BLOG,kOPEN_PERMISSION_ADD_PIC_T,kOPEN_PERMISSION_ADD_SHARE,kOPEN_PERMISSION_ADD_TOPIC,kOPEN_PERMISSION_CHECK_PAGE_FANS,kOPEN_PERMISSION_DEL_IDOL,kOPEN_PERMISSION_DEL_T,kOPEN_PERMISSION_GET_FANSLIST,kOPEN_PERMISSION_GET_IDOLLIST,kOPEN_PERMISSION_GET_INFO,kOPEN_PERMISSION_GET_OTHER_INFO,kOPEN_PERMISSION_GET_REPOST_LIST,kOPEN_PERMISSION_LIST_ALBUM,kOPEN_PERMISSION_UPLOAD_PIC,kOPEN_PERMISSION_GET_VIP_INFO,kOPEN_PERMISSION_GET_VIP_RICH_INFO,kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO,kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO,nil];[_tencentOAuth authorize:permissions inSafari:NO];//[[[sdkCall getinstance] _tencentOAuth] authorize:permissions inSafari:NO];}//登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。 登录成功:
-(void)tencentDidLogin
{_labelTitle.text = @"登录完成";if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]) {// 记录登录用户的OpenID、Token以及过期时间_labelAccessToken.text = _tencentOAuth.accessToken;NSLog(@"*********************");NSLog(_tencentOAuth.accessToken);}else{_labelAccessToken.text = @"登录不成功 没有获取accesstoken";}
}//非网络错误导致登录失败:
-(void)tencentDidNotLogin:(BOOL)cancelled
{if (cancelled){_labelTitle.text = @"用户取消登录";}else{_labelTitle.text = @"登录失败";}
}//网络错误导致登录失败:
-(void)tencentDidNotNetWork
{_labelTitle.text=@"无网络连接,请设置网络";
}- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth
{
}
@end
- #ifndef __QQLogin__HSpriteCPP__
- #define __QQLogin__HSpriteCPP__
- #include "cocos2d.h"
- using namespace cocos2d;
- class HSpriteCPP:public cocos2d::CCSprite {
- public:
- static HSpriteCPP* hspriteWithFile(const char *spName);
- void myInit();
- virtual ~HSpriteCPP();
- };
- #endif /* defined(__QQLogin__HSpriteCPP__) */
#ifndef __QQLogin__HSpriteCPP__
#define __QQLogin__HSpriteCPP__#include "cocos2d.h"
using namespace cocos2d;
class HSpriteCPP:public cocos2d::CCSprite {public:static HSpriteCPP* hspriteWithFile(const char *spName);void myInit();virtual ~HSpriteCPP();
};#endif /* defined(__QQLogin__HSpriteCPP__) */
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- #include "HSpriteOC.h"
- #include "sdkCall.h"
- #include "sdkDemoViewController.h"
- #endif
- #include "HSpriteCPP.h"
- HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName)
- {
- HSpriteCPP *pobSprite = new HSpriteCPP();
- if (pobSprite && pobSprite->initWithFile(spName)) {
- pobSprite->myInit();
- pobSprite->autorelease();
- return pobSprite;
- }
- CC_SAFE_DELETE(pobSprite);
- return NULL;
- }
- void HSpriteCPP::myInit()
- {
- #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
- //iOS代码
- [[sdkCall alloc] init];
- [[sdkCall alloc] login];
- #else
- #endif
- }
- HSpriteCPP::~HSpriteCPP()
- {
- }
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "HSpriteOC.h"
#include "sdkCall.h"
#include "sdkDemoViewController.h"
#endif#include "HSpriteCPP.h"
HSpriteCPP* HSpriteCPP::hspriteWithFile(const char *spName)
{HSpriteCPP *pobSprite = new HSpriteCPP();if (pobSprite && pobSprite->initWithFile(spName)) {pobSprite->myInit();pobSprite->autorelease();return pobSprite;}CC_SAFE_DELETE(pobSprite);return NULL;
}void HSpriteCPP::myInit()
{#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)//iOS代码[[sdkCall alloc] init];[[sdkCall alloc] login];#else#endif
}HSpriteCPP::~HSpriteCPP()
{}
3.运行测试:
HelloWorldScene.h
- #ifndef __HELLOWORLD_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
- #include "cocos2d.h"
- class HelloWorld : public cocos2d::CCLayer
- {
- public:
- // Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
- virtual bool init();
- // there's no 'id' in cpp, so we recommend to return the class instance pointer
- static cocos2d::CCScene* scene();
- // a selector callback
- void menuCloseCallback(CCObject* pSender);
- void OPenQQ(CCObject* pSender);
- // preprocessor macro for "static create()" constructor ( node() deprecated )
- CREATE_FUNC(HelloWorld);
- };
- #endif // __HELLOWORLD_SCENE_H__
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"class HelloWorld : public cocos2d::CCLayer
{
public:// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)virtual bool init();// there's no 'id' in cpp, so we recommend to return the class instance pointerstatic cocos2d::CCScene* scene();// a selector callbackvoid menuCloseCallback(CCObject* pSender);void OPenQQ(CCObject* pSender);// preprocessor macro for "static create()" constructor ( node() deprecated )CREATE_FUNC(HelloWorld);
};#endif // __HELLOWORLD_SCENE_H__
HelloWorldScene.cpp,在init(),添加如下代码:
- CCMenuItemImage *pQQItem =
- CCMenuItemImage::create("Connect_logo_5.png","Connect_logo_5.png",this,menu_selector(HelloWorld::OPenQQ) );
- pCloseItem->setPosition( ccp(200,200 ));
- CCMenu* pMenu1 = CCMenu::create(pQQItem, NULL);
- this->addChild(pMenu1, 2);
CCMenuItemImage *pQQItem = CCMenuItemImage::create("Connect_logo_5.png","Connect_logo_5.png",this,menu_selector(HelloWorld::OPenQQ) );
pCloseItem->setPosition( ccp(200,200 ));
CCMenu* pMenu1 = CCMenu::create(pQQItem, NULL);this->addChild(pMenu1, 2);
调用弹出QQ授受的方法:
- void HelloWorld::OPenQQ(CCObject* pSender)
- {
- HSpriteCPP *sp = HSpriteCPP::hspriteWithFile("Icon.png");
- sp->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width*0.5,CCDirector::sharedDirector()->getWinSize().height*0.5-100));
- this->addChild(sp,0);
- }
void HelloWorld::OPenQQ(CCObject* pSender)
{HSpriteCPP *sp = HSpriteCPP::hspriteWithFile("Icon.png");sp->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width*0.5,CCDirector::sharedDirector()->getWinSize().height*0.5-100));this->addChild(sp,0);
}
本人使用 cocos2d-x 2.0.4 ,测试没问题。运行效果如下:
小弟不材,各位网友们,若有什么问题,留言反馈下喔~~~