iOS開發之第三方分享微信分享、朋友圈分享,史上最新最全

来源:http://www.cnblogs.com/yihoudangxian/archive/2017/11/14/7831168.html
-Advertisement-
Play Games

微信分享前提: 1.需要成功在微信開發者平臺註冊了賬號, 並取的對應的 appkey appSecret。 2. 針對iOS9 添加了微信的白名單,以及設置了 scheme url 。 這都可以參照上面的鏈接,進行設置好。 3. 分享不跳轉的時候原因總結, 具體方法如下: 1. 首先檢查下是否有向微 ...


微信分享前提:

  1.需要成功在微信開發者平臺註冊了賬號, 並取的對應的 appkey appSecret。

        2. 針對iOS9 添加了微信的白名單,以及設置了 scheme url 。 這都可以參照上面的鏈接,進行設置好。 

  3. 分享不跳轉的時候原因總結, 具體方法如下:

             1. 首先檢查下是否有向微信註冊應用。

       2. 分享參數是否拼接錯誤。 監聽下麵 isSuccess  yes為成功, no為是否, 看看是否是分享的對象弄錯了。 文本對象與多媒體對象只能選一種。

[objc] view plain copy  
  1. BOOL isSuccess = [WXApi sendReq:sentMsg];  

 

 

[objc] view plain copy  
  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  2.       
  3.     //向微信註冊應用。  
  4.     [WXApi registerApp:URL_APPID withDescription:@"wechat"];  
  5.     return YES;  
  6. }  
  7.   
  8. -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{  
  9.       
  10.     /*! @brief 處理微信通過URL啟動App時傳遞的數據 
  11.      * 
  12.      * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中調用。 
  13.      * @param url 微信啟動第三方應用時傳遞過來的URL 
  14.      * @param delegate  WXApiDelegate對象,用來接收微信觸發的消息。 
  15.      * @return 成功返回YES,失敗返回NO。 
  16.      */  
  17.       
  18.     return [WXApi handleOpenURL:url delegate:self];  
  19. }  
  20.   
  21.   
  22. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{  
  23.     return [WXApi handleOpenURL:url delegate:self];  
  24. }  
  25.   
  26. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{  
  27.     return [WXApi handleOpenURL:url delegate:self];  
  28. }  

 

 

微信分享的核心代碼;

 

[objc] view plain copy  
  1. #pragma mark 微信好友分享  
  2. /** 
  3.  *  微信分享對象說明 
  4.  * 
  5.  *  @param sender  
  6. WXMediaMessage    多媒體內容分享 
  7. WXImageObject      多媒體消息中包含的圖片數據對象 
  8. WXMusicObject      多媒體消息中包含的音樂數據對象 
  9. WXVideoObject      多媒體消息中包含的視頻數據對象 
  10. WXWebpageObject    多媒體消息中包含的網頁數據對象 
  11. WXAppExtendObject  返回一個WXAppExtendObject對象 
  12. WXEmoticonObject   多媒體消息中包含的表情數據對象 
  13. WXFileObject       多媒體消息中包含的文件數據對象 
  14. WXLocationObject   多媒體消息中包含的地理位置數據對象 
  15. WXTextObject       多媒體消息中包含的文本數據對象 
  16.   
  17.  */  
  18.   
  19. -(void)isShareToPengyouquan:(BOOL)isPengyouquan{  
  20.     /** 標題 
  21.      * @note 長度不能超過512位元組 
  22.      */  
  23.     // @property (nonatomic, retain) NSString *title;  
  24.     /** 描述內容 
  25.      * @note 長度不能超過1K 
  26.      */  
  27.     //@property (nonatomic, retain) NSString *description;  
  28.     /** 縮略圖數據 
  29.      * @note 大小不能超過32K 
  30.      */  
  31.     //  @property (nonatomic, retain) NSData   *thumbData;  
  32.     /** 
  33.      * @note 長度不能超過64位元組 
  34.      */  
  35.     // @property (nonatomic, retain) NSString *mediaTagName;  
  36.     /** 
  37.      * 多媒體數據對象,可以為WXImageObject,WXMusicObject,WXVideoObject,WXWebpageObject等。 
  38.      */  
  39.     // @property (nonatomic, retain) id        mediaObject;  
  40.       
  41.     /*! @brief 設置消息縮略圖的方法 
  42.      * 
  43.      * @param image 縮略圖 
  44.      * @note 大小不能超過32K 
  45.      */  
  46.     //- (void) setThumbImage:(UIImage *)image;  
  47.     //縮略圖  
  48.     UIImage *image = [UIImage imageNamed:@"消息中心 icon"];  
  49.     WXMediaMessage *message = [WXMediaMessage message];  
  50.     message.title = @"微信分享測試";  
  51.     message.description = @"微信分享測試----描述信息";  
  52.     //png圖片壓縮成data的方法,如果是jpg就要用 UIImageJPEGRepresentation  
  53.     message.thumbData = UIImagePNGRepresentation(image);  
  54.     [message setThumbImage:image];  
  55.       
  56.   
  57.     WXWebpageObject *ext = [WXWebpageObject object];  
  58.     ext.webpageUrl = @"http://www.baidu.com";  
  59.     message.mediaObject = ext;  
  60.     message.mediaTagName = @"ISOFTEN_TAG_JUMP_SHOWRANK";  
  61.       
  62.     SendMessageToWXReq *sentMsg = [[SendMessageToWXReq alloc]init];  
  63.     sentMsg.message = message;  
  64.     sentMsg.bText = NO;  
  65.     //選擇發送到會話(WXSceneSession)或者朋友圈(WXSceneTimeline)  
  66.     if (isPengyouquan) {  
  67.         sentMsg.scene = WXSceneTimeline;  //分享到朋友圈  
  68.     }else{  
  69.         sentMsg.scene =  WXSceneSession;  //分享到會話。  
  70.     }  
  71.       
  72.     //如果我們想要監聽是否成功分享,我們就要去appdelegate裡面 找到他的回調方法  
  73.     // -(void) onResp:(BaseResp*)resp .我們可以自定義一個代理方法,然後把分享的結果返回回來。  
  74.     appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;  
  75.     appdelegate.wxDelegate = self;                <span style="font-family: Arial, Helvetica, sans-serif;"> //添加對appdelgate的微信分享的代理</span>  
  76.     BOOL isSuccess = [WXApi sendReq:sentMsg];  
  77.    
  78. }  



 

完整的代碼如下:

appDelegate.h

 

[objc] view plain copy  
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @protocol WXDelegate <NSObject>  
  4.   
  5. -(void)loginSuccessByCode:(NSString *)code;  
  6. -(void)shareSuccessByCode:(int) code;  
  7. @end  
  8.   
  9. @interface AppDelegate : UIResponder <UIApplicationDelegate>  
  10.   
  11. @property (strong, nonatomic) UIWindow *window;  
  12. @property (nonatomic, weak) id<WXDelegate> wxDelegate;  
  13. @end  



 

appDelegate.m

 

[objc] view plain copy  
  1. #import "AppDelegate.h"  
  2. #import "WXApi.h"  
  3.   
  4. //微信開發者ID  
  5. #define URL_APPID @"app id"  
  6.   
  7.   
  8.   
  9.   
  10. @interface AppDelegate ()<WXApiDelegate>  
  11.   
  12.   
  13. @end  
  14.   
  15.   
  16.   
  17. @implementation AppDelegate  
  18.   
  19.   
  20. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
  21.       
  22.     //向微信註冊應用。  
  23.     [WXApi registerApp:URL_APPID withDescription:@"wechat"];  
  24.     return YES;  
  25. }  
  26.   
  27. -(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{  
  28.       
  29.     /*! @brief 處理微信通過URL啟動App時傳遞的數據 
  30.      * 
  31.      * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中調用。 
  32.      * @param url 微信啟動第三方應用時傳遞過來的URL 
  33.      * @param delegate  WXApiDelegate對象,用來接收微信觸發的消息。 
  34.      * @return 成功返回YES,失敗返回NO。 
  35.      */  
  36.       
  37.     return [WXApi handleOpenURL:url delegate:self];  
  38. }  
  39.   
  40.   
  41. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{  
  42.     return [WXApi handleOpenURL:url delegate:self];  
  43. }  
  44.   
  45. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation{  
  46.     return [WXApi handleOpenURL:url delegate:self];  
  47. }  
  48.   
  49. /*! 微信回調,不管是登錄還是分享成功與否,都是走這個方法 @brief 發送一個sendReq後,收到微信的回應 
  50.  * 
  51.  * 收到一個來自微信的處理結果。調用一次sendReq後會收到onResp。 
  52.  * 可能收到的處理結果有SendMessageToWXResp、SendAuthResp等。 
  53.  * @param resp具體的回應內容,是自動釋放的 
  54.  */  
  55. -(void) onResp:(BaseResp*)resp{  
  56.     NSLog(@"resp %d",resp.errCode);  
  57.       
  58.     /* 
  59.     enum  WXErrCode { 
  60.         WXSuccess           = 0,    成功 
  61.         WXErrCodeCommon     = -1,  普通錯誤類型 
  62.         WXErrCodeUserCancel = -2,    用戶點擊取消並返回 
  63.         WXErrCodeSentFail   = -3,   發送失敗 
  64.         WXErrCodeAuthDeny   = -4,    授權失敗 
  65.         WXErrCodeUnsupport  = -5,   微信不支持 
  66.     }; 
  67.     */  
  68.     if ([resp isKindOfClass:[SendAuthResp class]]) {   //授權登錄的類。  
  69.         if (resp.errCode == 0) {  //成功。  
  70.             //這裡處理回調的方法 。 通過代理吧對應的登錄消息傳送過去。  
  71.             if ([_wxDelegate respondsToSelector:@selector(loginSuccessByCode:)]) {  
  72.                 SendAuthResp *resp2 = (SendAuthResp *)resp;  
  73.                 [_wxDelegate loginSuccessByCode:resp2.code];  
  74.             }  
  75.         }else{ //失敗  
  76.             NSLog(@"error %@",resp.errStr);  
  77.             UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"登錄失敗" message:[NSString stringWithFormat:@"reason : %@",resp.errStr] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil nil];  
  78.             [alert show];  
  79.         }  
  80.     }  
  81.       
  82.     if ([resp isKindOfClass:[SendMessageToWXResp class]]) { //微信分享 微信回應給第三方應用程式的類  
  83.         SendMessageToWXResp *response = (SendMessageToWXResp *)resp;  
  84.         NSLog(@"error code %d  error msg %@  lang %@   country %@",response.errCode,response.errStr,response.lang,response.country);  
  85.           
  86.         if (resp.errCode == 0) {  //成功。  
  87.             //這裡處理回調的方法 。 通過代理吧對應的登錄消息傳送過去。  
  88.             if (_wxDelegate) {  
  89.                 if([_wxDelegate respondsToSelector:@selector(shareSuccessByCode:)]){  
  90.                     [_wxDelegate shareSuccessByCode:response.errCode];  
  91.                 }  
  92.             }  
  93.         }else{ //失敗  
  94.             NSLog(@"error %@",resp.errStr);  
  95.             UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"分享失敗" message:[NSString stringWithFormat:@"reason : %@",resp.errStr] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil nil];  
  96.             [alert show];  
  97.         }  
  98.     }  
  99. @end  

 

 

ViewController.h

 

[objc] view plain copy  
  1. #import <UIKit/UIKit.h>  
  2.   
  3. @interface ViewController : UIViewController  
  4.   
  5.   
  6. @end  



 

ViewController.m

 

[objc] view plain copy  
    1. #import "ViewController.h"  
    2. #import "WXApi.h"  
    3. #import "AppDelegate.h"  
    4. //微信開發者ID  
    5. #define URL_APPID @"appid "  
    6. #define URL_SECRET @"app secret"  
    7. #import "AFNetworking.h"  
    8. @interface ViewController ()<WXDelegate>  
    9. {  
    10.     AppDelegate *appdelegate;  
    11. }  
    12. @end  
    13.   
    14. @implementation ViewController  
    15.   
    16. - (void)viewDidLoad {  
    17.     [super viewDidLoad];  
    18.     // Do any additional setup after loading the view, typically from a nib.  
    19. }  
    20. #pragma mark 微信登錄  
    21. - (IBAction)weixinLoginAction:(id)sender {  
    22.       
    23.     if ([WXApi isWXAppInstalled]) {  
    24.         SendAuthReq *req = [[SendAuthReq alloc]init];  
    25.         req.scope = @"snsapi_userinfo";  
    26.         req.openID = URL_APPID;  
    27.         req.state = @"1245";  
    28.         appdelegate = [UIApplication sharedApplication].delegate;  
    29.         appdelegate.wxDelegate = self;  
    30.   
    31.         [WXApi sendReq:req];  
    32.     }else{  
    33.         //把微信登錄的按鈕隱藏掉。  
    34.     }  
    35. }  
    36. #pragma mark 微信登錄回調。  
    37. -(void)loginSuccessByCode:(NSString *)code{  
    38.     NSLog(@"code %@",code);  
    39.     __weak typeof(*&self) weakSelf = self;  
    40.       
    41.     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];  
    42.     manager.requestSerializer = [AFJSONRequestSerializer serializer];//請求  
    43.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];//響應  
    44.     manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json", @"text/json",@"text/plain", nil nil];  
    45.     //通過 appid  secret 認證code . 來發送獲取 access_token的請求  
    46.     [manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",URL_APPID,URL_SECRET,code] parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {  
    47.          
    48.     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {  //獲得access_token,然後根據access_token獲取用戶信息請求。  
    49.   
    50.         NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];  
    51.         NSLog(@"dic %@",dic);  
    52.           
    53.         /* 
    54.          access_token   介面調用憑證 
    55.          expires_in access_token介面調用憑證超時時間,單位(秒) 
    56.          refresh_token  用戶刷新access_token 
    57.          openid 授權用戶唯一標識 
    58.          scope  用戶授權的作用域,使用逗號(,)分隔 
    59.          unionid     當且僅當該移動應用已獲得該用戶的userinfo授權時,才會出現該欄位 
    60.          */  
    61.         NSString* accessToken=[dic valueForKey:@"access_token"];  
    62.         NSString* openID=[dic valueForKey:@"openid"];  
    63.         [weakSelf requestUserInfoByToken:accessToken andOpenid:openID];  
    64.     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {  
    65.      NSLog(@"error %@",error.localizedFailureReason);  
    66.     }];  
    67.       
    68. }  
    69.   
    70. -(void)requestUserInfoByToken:(NSString *)token andOpenid:(NSString *)openID{  
    71.       
    72.     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];  
    73.     manager.requestSerializer = [AFJSONRequestSerializer serializer];  
    74.     manager.responseSerializer = [AFHTTPResponseSerializer serializer];  
    75.     [manager GET:[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",token,openID] parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {  
    76.           
    77.     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {  
    78.         NSDictionary *dic = (NSDictionary *)[NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];  
    79.         //開發人員拿到相關微信用戶信息後, 需要與後臺對接,進行登錄  
    80.         NSLog(@"login success dic  ==== %@",dic);  
    81.           
    82.     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {  
    83.         NSLog(@"error %ld",(long)error.code);  
    84.     }];  
    85. }  
    86.   
    87. #pragma mark 微信好友分享  
    88. /** 
    89.  *  微信分享對象說明 
    90.  * 
    91.  *  @param sender  
    92. WXMediaMessage    多媒體內容分享 
    93. WXImageObject      多媒體消息中包含的圖片數據對象 
    94. WXMusicObject      多媒體消息中包含的音樂數據對象 
    95. WXVideoObject      多媒體消息中包含的視頻數據對象 
    96. WXWebpageObject    多媒體消息中包含的網頁數據對象 
    97. WXAppExtendObject  返回一個WXAppExtendObject對象 
    98. WXEmoticonObject   多媒體消息中包含的表情數據對象 
    99. WXFileObject       多媒體消息中包含的文件數據對象 
    100. WXLocationObject   多媒體消息中包含的地理位置數據對象 
    101. WXTextObject       多媒體消息中包含的文本數據對象 
    102.   
    103.  */  
    104. - (IBAction)weixinShareAction:(id)sender {  
    105.  [self isShareToPengyouquan:NO];  
    106.       
    107. }  
    108.   
    109. #pragma mark 微信朋友圈分享  
    110. - (IBAction)friendShareAction:(id)sender {  
    111.       
    112.     [self isShareToPengyouquan:YES];  
    113. }  
    114. -(void)isShareToPengyouquan:(BOOL)isPengyouquan{  
    115.     /** 標題 
    116.      * @note 長度不能超過512位元組 
    117.      */  
    118.     // @property (nonatomic, retain) NSString *title;  
    119.     /** 描述內容 
    120.      * @note 長度不能超過1K 
    121.      */  
    122.     //@property (nonatomic, retain) NSString *description;  
    123.     /** 縮略圖數據 
    124.      * @note 大小不能超過32K 
    125.      */  
    126.     //  @property (nonatomic, retain) NSData   *thumbData;  
    127.     /** 
    128.      * @note 長度不能超過64位元組 
    129.      */  
    130.     // @property (nonatomic, retain) NSString *mediaTagName;  
    131.     /** 
    132.      * 多媒體數據對象,可以為WXImageObject,WXMusicObject,WXVideoObject,WXWebpageObject等。 
    133.      */  
    134.     // @property (nonatomic, retain) id        mediaObject;  
    135.       
    136.     /*! @brief 設置消息縮略圖的方法 
    137.      * 
    138.      * @param image 縮略圖 
    139.      * @note 大小不能超過32K 
    140.      */  
    141.     //- (void) setThumbImage:(UIImage *)image;  
    142.     //縮略圖  
    143.     UIImage *image = [UIImage imageNamed:@"消息中心 icon"];  
    144.     WXMediaMessage *message = [WXMediaMessage message];  
    145.     message.title = @"微信分享測試";  
    146.     message.description = @"微信分享測試----描述信息";  
    147.     //png圖片壓縮成data的方法,如果是jpg就要用 UIImageJPEGRepresentation  
    148.     message.thumbData = UIImagePNGRepresentation(image);  
    149.     [message setThumbImage:image];  
    150.       
    151.   
    152.     WXWebpageObject *ext = [WXWebpageObject object];  
    153.     ext.webpageUrl = @"http://www.baidu.com";  
    154.     message.mediaObject = ext;  
    155.     message.mediaTagName = @"ISOFTEN_TAG_JUMP_SHOWRANK";  
    156.       
    157.     SendMessageToWXReq *sentMsg = [[SendMessageToWXReq alloc]init];  
    158.     sentMsg.message = message;  
    159.     sentMsg.bText = NO;  
    160.     //選擇發送到會話(WXSceneSession)或者朋友圈(WXSceneTimeline)  
    161.     if (isPengyouquan) {  
    162.         sentMsg.scene = WXSceneTimeline;  //分享到朋友圈  
    163.     }else{  
    164.         sentMsg.scene =  WXSceneSession;  //分享到會話。  
    165.     }  
    166.       
    167.     //如果我們想要監聽是否成功分享,我們就要去appdelegate裡面 找到他的回調方法  
    168.     // -(void) onResp:(BaseResp*)resp .我們可以自定義一個代理方法,然後把分享的結果返回回來。  
    169.     appdelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;  
    170.     appdelegate.wxDelegate = self;  
    171.     BOOL isSuccess = [WXApi sendReq:sentMsg];  
    172.       
    173.       
    174.     //添加對appdelgate的微信分享的代理  
    175.       
    176. }  
    177.   
    178. #pragma mark 監聽微信分享是否成功 delegate  
    179. -(void)shareSuccessByCode:(int)code{  
    180.     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"分享成功" message:[NSString stringWithFormat:@"reason : %d",code] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil nil];  
    181.     [alert show];  
    182. }  
    183.   
    184.   
    185.   
    186. - (void)didReceiveMemoryWarning {  
    187.     [super didReceiveMemoryWarning];  
    188.     // Dispose of any resources that can be recreated.  
    189. }  
    190.   
    191. @end  

源碼下載地址:http://www.jinhusns.com/Products/Download


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 我們經常使用github上的開源項目,使用步驟也很簡單 比如: 這裡就學習一下如何將自己的類庫做出這種可以供他人使用的開源項目。 一、Android studio項目準備 這時候我們想寫了一個自定義控制項,想要傳到github上讓別人使用。 1、先在該項目下創建一個Module 2、選擇Android ...
  • 一、Monkey測試原理:Monkey是Android中的一個命令行工具,可以運行在模擬器里或實際設備中。它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程式進行壓力測試。Monkey測試是一種為了測試軟體的穩定性、健壯性的快速有效的方法。 二、測試準備 1 ...
  • 1、佈局文件:res/drawable/bg_shadow.xml [java] view plain copy <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/ ...
  • 頭文件 授權 關於通訊錄的授權這裡不再多說了,我在上一篇中有提到:通訊錄授權 訪問通訊錄 跳轉到系統通訊錄 添加代理 代理方法 註:上面兩個選擇回調代理實現一個就可以 相關借鑒:http://www.jb51.net/article/95500.htm ...
  • 總結下幾個常用到的獲取手機許可權,從iOS8以後,獲取手機某種許可權需要在info.plist文件中添加許可權的描述文件 1.通訊錄 頭文件 獲取通訊錄許可權並請求授權 2.相機 頭文件 獲取相機許可權(直接跳相機,在跳到相機時,會提示是否允許訪問相機) 3.相冊 頭文件 獲取相冊許可權(直接跳相冊,在跳到相冊 ...
  • 為什麼要對Android中的圖片進行採樣縮放呢? 是為了更加高效的載入Bitmap。假設通過imageView來顯示圖片,很多時候ImageView並沒有圖片的原始尺寸那麼大,這時候把整張圖片載入進來後再設給ImageView是沒有必要的,因為ImagView並沒有辦法顯示原始的圖片。 所以我們可以 ...
  • “移動警務通”綜合系統為公安行業提供一種高效的移動警務應用解決方案,適用於交警、巡警、刑警、治安警等各類警務人員,利用移動網路,通過身份證拍照識別軟體接入警務通後臺管理系統和警務通呼叫中心(110指揮調度中心/便民報警處理中心)系統,構成新一代立體的公安辦公網路。目前身份證拍照識別、車牌拍照識別技術 ...
  • 在管理工具里打開Internet 信息服務(IIS)管理器。然後選擇需要配置的網站。 右側的界面中會顯示該網站的所有功能配置,我們選擇並點擊進入“MIME類型” 在左側的操作區選擇點擊“添加”MIME。 在彈出的添加視窗里的文件擴展名輸入:APK 在MIME類型輸入:application/vnd. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...