iOS集成QQ、微信、微博、短信、邮件分享(非第三方集成)

本文详细介绍如何在iOS应用中实现QQ、微博、微信等社交平台的分享功能,并提供了邮件和短信分享的具体实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写的比较仓促,主要是自己看,有不明白的就留言给我吧

首先appdelegate中加入

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

    return [WXApi handleOpenURL:url delegate:self] || [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];

//    return [WXApi handleOpenURL:url delegate:self] || [QQApi handleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];

}


- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

    return [WXApi handleOpenURL:url delegate:self] || [TencentOAuth HandleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];

//    return [WXApi handleOpenURL:url delegate:self] || [QQApi handleOpenURL:url] || [WeiboSDK handleOpenURL:url delegate:self];


}



1、QQ分享(QQ空间、QQ会话)

首先在Targets中的info中选择URL Types添加QQ的信息,在identifier中写tencent 在URL Schemes中添加你的你们公司申请的appid,格式为"tencent+appid"。

你可以下载一份QQ提供的Demo看看,在你需要分享的页面导入其头文件

#import "TencentRequest.h"

#import "TencentOpenAPI/QQApiInterface.h"

#import <objc/runtime.h>

#import <MessageUI/MessageUI.h>

#import <MessageUI/MFMessageComposeViewController.h>

#import "TencentOpenAPI.framework/Headers/TencentOAuth.h"

大概也就上边这些,就足够
然后首先在你分享的代码前加上这一句,类似于微信以及微博的注册appid,但是QQ的比较奇葩,也可能是我写的就比较奇葩,其中的调用方法在下面,直接拿过来用就好了

     TencentOAuth * tencentOAuth = [[ TencentOAuth alloc ] initWithAppId : AppIDForQQ andDelegate : self ];
下面是分享网络图片的代码, 我分享的是新闻类的所以在初始化的时候选用了

    NSString *url =@"sports.qq.com/nba/";

    NSString *utf8String =@"http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&ipn=d&word=越前龙马&step_word=越前龙马&pn=33&spn=0&di=91758034940&pi=&rn=1&is=&istype=&ie=utf-8&oe=utf-8&in=32663&cl=2&lm=-1&st=&cs=3048474619%2C1612991872&os=2035090878%2C1902782440&adpicid=0&ln=1000&fr=acint&fmq=1422327488759_R&ic=&s=&se=&sme=0&tab=&width=&height=&face=&ist=&jit=&cg=&objurl=http%3A%2F%2Fimg4.duitang.com%2Fuploads%2Fitem%2F201207%2F26%2F20120726071437_BhyLf.thumb.600_0.jpeg&fromurl=ippr_z2C%24qAzdH3FAzdH3F4_z%26e3B17tpwg2_z%26e3Bv54AzdH3Frj5rsjAzdH3F4ks52AzdH3F8cml9anmnAzdH3F1jpwtsAzdH3F";

QQApiNewsObject *newsObj = [QQApiNewsObject objectWithURL:[NSURL URLWithString:url] title:@"腾讯空间分享测试Demo" description:@"貌似有点明白了" previewImageURL:[NSURL URLWithString:utf8String]];

    [newsObj setCflag:[self shareControlFlags]];

    SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];

    QQApiSendResultCode sent =0;

    sent = [QQApiInterfaceSendReqToQZone:req];

//    sent = [QQApiInterface sendReq:req];//这是分享到QQ

    [selfhandleSendResult:sent];//这是分享到空间

//下面是分享本地图片的代码,其实主要是初始化方式不同,在此不再多说

    NSString *imagePath = [[NSBundlemainBundle] pathForResource:@"LOGO"ofType:@"png"];

    NSData *imgData = [NSData dataWithContentsOfFile:imagePath];

    QQApiNewsObject *imgObj = [QQApiNewsObjectobjectWithURL:[NSURLURLWithString:url]title:@"腾讯分享测试Demo"description:@"我擦。快来啪啪啪"previewImageData:imgData];

    [imgObj setCflag:[selfshareControlFlags]];

    

    SendMessageToQQReq *req = [SendMessageToQQReqreqWithContent:imgObj];

    QQApiSendResultCode sent =0;

//    sent = [QQApiInterface SendReqToQZone:req];//空间分享

    sent = [QQApiInterfacesendReq:req];//QQ分享

    [selfhandleSendResult:sent];







- (uint64_t)shareControlFlags

{

    NSDictionary *context = [self currentNavContext];

    __block uint64_t cflag = 0;

    [context enumerateKeysAndObjectsUsingBlock:^(id key,id obj, BOOL *stop) {

        if ([obj isKindOfClass:[NSNumberclass]] &&

            [key isKindOfClass:[NSString class]] &&

            [key hasPrefix:@"kQQAPICtrlFlag"])

        {

            cflag |= [objunsignedIntValue];

        }

    }];


    return cflag;

}


- (NSMutableDictionary *)currentNavContext

{

    UINavigationController *navCtrl = [selfnavigationController];

    NSMutableDictionary *context = objc_getAssociatedObject(navCtrl,objc_unretainedPointer(@"currentNavContext"));

    if (nil == context)

    {

        context = [NSMutableDictionarydictionaryWithCapacity:3];

        objc_setAssociatedObject(navCtrl,objc_unretainedPointer(@"currentNavContext"), context,OBJC_ASSOCIATION_RETAIN_NONATOMIC);

    }


    return context;

}



- (void)handleSendResult:(QQApiSendResultCode)sendResult

{

    switch (sendResult)

    {

        caseEQQAPIAPPNOTREGISTED:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"App未注册"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        caseEQQAPIMESSAGECONTENTINVALID:

        caseEQQAPIMESSAGECONTENTNULL:

        caseEQQAPIMESSAGETYPEINVALID:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"发送参数错误"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        caseEQQAPIQQNOTINSTALLED:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"未安装手Q"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        caseEQQAPIQQNOTSUPPORTAPI:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"API接口不支持"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        caseEQQAPISENDFAILD:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"发送失败"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        caseEQQAPIQZONENOTSUPPORTTEXT:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"空间分享不支持纯文本分享,请使用图文分享"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        caseEQQAPIQZONENOTSUPPORTIMAGE:

        {

            UIAlertView *msgbox = [[UIAlertViewalloc] initWithTitle:@"Error"message:@"空间分享不支持纯图片分享,请使用图文分享"delegate:nilcancelButtonTitle:@"取消"otherButtonTitles:nil];

            [msgboxshow];

            break;

        }

        default:

        {

            break;

        }

    }

}


2.新浪微博

首先同样在你的Targets中的Info中选择URL Types,ldentifier填写com.weibo  Url Schemes中写wb+appid

在appdelegate中的didfinishlaunch中注册微博的appid

    [WeiboSDKregisterApp:@"你的appid"];

分享代码如下

#pragma mark - 分享到微博

- (void)shareFriend{

    AppDelegate *myDelegate =(AppDelegate*)[[UIApplicationsharedApplication] delegate];

    

    WBAuthorizeRequest *authRequest = [WBAuthorizeRequestrequest];

    authRequest.redirectURI =@"www.baidu.com";

    authRequest.scope =@"all";

    

    WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequestrequestWithMessage:[selfmessageToShare]authInfo:authRequestaccess_token:myDelegate.wbtoken];

    request.userInfo =@{@"ShareMessageFrom":@"ChatRootViewController",

                        @"Other_Info_1": [NSNumbernumberWithInt:123],

                        @"Other_Info_2": @[@"obj1",@"obj2"],

                         @"Other_Info_3":@{@"key1": @"obj1", @"key2": @"obj2"}};

    //    request.shouldOpenWeiboAppInstallPageIfNotInstalled = NO;

    [WeiboSDKsendRequest:request];


}


- (WBMessageObject *)messageToShare

{

    WBMessageObject *message = [WBMessageObjectmessage];

    

    //    if (self.textSwitch.on)

    //    {

    //        message.text = NSLocalizedString(@"测试通过WeiboSDK发送文字到微博!", nil);

    //    }

    //

    //    if (self.imageSwitch.on)

    //    {

    //        WBImageObject *image = [WBImageObject object];

    //        image.imageData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"image_1" ofType:@"jpg"]];

    //        message.imageObject = image;

    //    }

    //

    //    if (self.mediaSwitch.on)

    //    {

    WBWebpageObject *webpage = [WBWebpageObjectobject];

    webpage.objectID =@"identifier1";

    webpage.title =NSLocalizedString(@"分享网页标题wwww",nil);

    webpage.description = [NSStringstringWithFormat:NSLocalizedString(@"测试来自你的应用名称-%.0f",nil), [[NSDatedate] timeIntervalSince1970]];

    webpage.thumbnailData = [NSDatadataWithContentsOfFile:[[NSBundlemainBundle] pathForResource:@"生气"ofType:@"png"]];

    webpage.webpageUrl =@"http://www.baidu.com";

    message.mediaObject = webpage;

    //    }

    

    return message;

}


3.微信(跟微博几乎一样)


#pragma mark - 分享朋友圈

//- (void)shareFriend{

//    WXMediaMessage *message = [WXMediaMessage message];

//    message.title = @"专访王尼玛:产品之上的毁我世界观";

//    message.description = @"微信的平台化发展方向是否真的会让这个原本简洁的产品变得臃肿?在国际化发展方向上,微信面临的问题真的是文化差异壁垒吗?腾讯高级副总裁、微信产品负责人张小龙给出了自己的回复。";

//    [message setThumbImage:[UIImage imageNamed:@"res2.png"]];

//    

//    WXWebpageObject *ext = [WXWebpageObject object];

//    ext.webpageUrl = @"http://tech.qq.com/zt2012/tmtdecode/252.htm";

//    

//    message.mediaObject = ext;

//    message.mediaTagName = @"WECHAT_TAG_JUMP_SHOWRANK";

//    

//    SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];

//    req.bText = NO;

//    req.message = message;

//    req.scene = WXSceneTimeline;

//    [WXApi sendReq:req];

//}


4.分享邮件以及短信

//- (void)shareFriend{

//    Class mailClass = (NSClassFromString(@"MFMailComposeViewController"));

//    if (mailClass != nil) {

//        if ([mailClass canSendMail]) {

//            [self displayMailComposerSheet];

//        } else {

//            UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@""message:@"设备不支持邮件功能" delegate:self cancelButtonTitle:@"确定"otherButtonTitles:nil];

//            

//            [alert show];

//        }

//    } else {

//        

//    }

//}

//

//-(void)displayMailComposerSheet

//

//{

//    

//    MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init];

//    

//    

//    

//    picker.mailComposeDelegate =self;

//    

//    

//    

//    [picker setSubject:@"文件分享"];

//    // Set up recipients

//    

//    NSArray *toRecipients = [NSArray arrayWithObject:@"first@qq.com"];

//    

//    NSArray *ccRecipients = [NSArray arrayWithObjects:@"second@qq.com",@"third@qq.com", nil];

//    

//    NSArray *bccRecipients = [NSArray arrayWithObject:@"fourth@qq.com"];

//    

//    

//    

//    

//    

//    [picker setToRecipients:toRecipients];

//    

//    [picker setCcRecipients:ccRecipients];

//    

//    [picker setBccRecipients:bccRecipients];

//    

//    //发送图片附件

//    

//    //NSString *path = [[NSBundle mainBundle] pathForResource:@"rainy" ofType:@"jpg"];

//    

//    //NSData *myData = [NSData dataWithContentsOfFile:path];

//    

//    //[picker addAttachmentData:myData mimeType:@"image/jpeg" fileName:@"rainy.jpg"];

//    

//    

//    

//    //发送txt文本附件

//    

//    //NSString *path = [[NSBundle mainBundle] pathForResource:@"MyText" ofType:@"txt"];

//    

//    //NSData *myData = [NSData dataWithContentsOfFile:path];

//    

//    //[picker addAttachmentData:myData mimeType:@"text/txt" fileName:@"MyText.txt"];

//    

//    

//    

//    //发送doc文本附件

//    

//    //NSString *path = [[NSBundle mainBundle] pathForResource:@"MyText" ofType:@"doc"];

//    

//    //NSData *myData = [NSData dataWithContentsOfFile:path];

//    

//    //[picker addAttachmentData:myData mimeType:@"text/doc" fileName:@"MyText.doc"];

//    

//    

//    

//    //发送pdf文档附件

//    

//    /*

//     

//     NSString *path = [[NSBundlemainBundle] pathForResource:@"CodeSigningGuide"ofType:@"pdf"];

//     

//     NSData *myData = [NSDatadataWithContentsOfFile:path];

//     

//     [pickeraddAttachmentData:myData mimeType:@"file/pdf"fileName:@"rainy.pdf"];

//     

//     */

//    

//    

//    

//    

//    

//    // Fill out the email body text

//    

//    NSString *emailBody =[NSString stringWithFormat:@"我分享了文件给您,地址是www.imyeliao.com"] ;

//    

//    [picker setMessageBody:emailBody isHTML:NO];

//    

//    [self presentViewController:picker animated:YES completion:nil];

//}

//

//- (void)mailComposeController:(MFMailComposeViewController*)controller

//

//          didFinishWithResult:(MFMailComposeResult)result error:(NSError*)error {

//    

//    

//    

//    

//    

//    // Notifies users about errors associated with the interface

//    

//    switch (result)

//    

//    {

//            

//        caseMFMailComposeResultCancelled:

//            

//            NSLog(@"Result: Mail sending canceled");

//            

//            break;

//            

//        caseMFMailComposeResultSaved:

//            

//            NSLog(@"Result: Mail saved");

//            

//            break;

//            

//        caseMFMailComposeResultSent:

//            

//            NSLog(@"Result: Mail sent");

//            

//            break;

//            

//        caseMFMailComposeResultFailed:

//            

//            NSLog(@"Result: Mail sending failed");

//            

//            break;

//            

//        default:

//            

//            NSLog(@"Result: Mail not sent");

//            

//            break;

//            

//    }

//    

//    [self dismissViewControllerAnimated:YES completion:nil];

//    

//}


////短信

//

//-(void)shareFriend{

//    

//    Class messageClass = (NSClassFromString(@"MFMessageComposeViewController"));

//    

//    

//    

//    if (messageClass != nil) {

//        

//        // Check whether the current device is configured for sending SMS messages

//        

//        if ([messageClass canSendText]) {

//            

//            [self displaySMSComposerSheet];

//            

//        }

//        

//        else {

//            

//            UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@""message:@"设备不支持短信功能" delegate:self cancelButtonTitle:@"确定"otherButtonTitles:nil];

//            

//            [alert show];

//            

//            

//            

//            

//        }

//        

//    }

//    

//    else {

//        

//    }

//    

//}

//

//-(void)displaySMSComposerSheet

//

//{

//    

//    MFMessageComposeViewController *picker = [[MFMessageComposeViewController alloc] init];

//    

//    picker.messageComposeDelegate =self;

//    

//    NSString *smsBody =[NSString stringWithFormat:@"我分享了文件给您,地址是www.imyeliao.com"] ;

//    

//    picker.body=smsBody;

//    

//    [self presentViewController:picker animated:YES completion:nil];

//    

//}

//

//- (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result{

//    // Notifies users about errors associated with the interface

//    switch (result) {

//        case MessageComposeResultCancelled:

//            if (DEBUG) NSLog(@"Result: canceled");

//            break;

//        case MessageComposeResultSent:

//            if (DEBUG) NSLog(@"Result: Sent");

//            break;

//        case MessageComposeResultFailed:

//            if (DEBUG) NSLog(@"Result: Failed");

//            break;

//        default:

//            break;

//    }

//    [self dismissViewControllerAnimated:YES completion:nil];

//}











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值