ios應用接入開放平台
前幾天試了一下服務端接入公眾平台,昨天又看了一下APP接入開放平台
開放平台和公眾平台的區別
公眾平台針對的是公眾帳號,除了提供管理後台之外,也開放了若干介面,讓伺服器和開發人員自己的應用系統能夠對接
開放平台是的整體接入方式,不局限於公眾帳號(訂閱號,服務號),移動APP和web應用也可以通過開放平台,實現與對接。可以說,公眾平台的API部分,是開放平台的一個子集
開放平台大體上分為3個部分,分別針對移動APP,WEB應用,公眾帳號的接入
移動APP接入開放平台的作用
目前,移動APP接入開放平台後,可以獲得以下的特性:
1、向好友發訊息
2、發訊息到朋友圈
3、收藏內容到“我的收藏”
4、用帳號登陸APP,獲得帳號的資訊
5、支援支付
在朋友圈可以看到一個訊息後面跟著“來自XXX”,這就是XXX應用接入開放平台後得到的能力
ios app接入方式
流程和代碼都不複雜,具體方法請看開放平台官網,本文不贅述。只提醒一點,需要在xcode裡配置你自己APP的URL Type,URL Schemas需要填寫開放平台提供的那個app id。如果漏掉了這一步,一樣可以發訊息到,但是發完訊息以後就無法從再跳回你的APP了,因為用戶端也是通過openURL方法,跳回你的APP,需要你的APP自己註冊上URL Schemas
對接的原理
首先,一個大的限制是,APP不可能通過提供的SDK,直接把訊息發到伺服器上。而是從開發人員的APP中,開啟應用,然後還是由把訊息發出去,再跳回開發人員自己的APP。也就是說,APP和的互動,是通過應用間跳轉來完成的,所以核心還是iOS的這2個方法:
- (BOOL)openURL:(NSURL*)url;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
發送訊息的代碼是:
[WXApi sendReq:req];
SDK當然不是開源的,所以從這行代碼我們看不出什麼。但是很容易想到,跳轉到另一個app的方式在iOS中就是openURL方法,所以這行代碼做的事情,類似於:
NSString *weixinURL = @"weixin_schema://app_id?title=xxx&content=xxx";[[UIApplication sharedApplication] openURL:[NSURL URLWithString:weixinURL]];
通過weixin_schema,開啟了機器上安裝的應用;在URL末尾添加了相關參數,解析後處理。然後在裡把訊息發出去以後,也會調用openURL,又回到了開發人員自己的APP:
URL地址是,wx_xxxxxxxxxxx://platformId=wechat
這個URL被AppDelegate中的這個方法攔截:
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ return [WXApi handleOpenURL:url delegate:self];}
然後handleOpenURL方法調用了:
-(void) onResp:(BaseResp*)resp{ NSString *strTitle = [NSString stringWithFormat:@"發送訊息結果"]; NSString *strMsg = [NSString stringWithFormat:@"errcode: %d", resp.errCode]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show];}
整個互動的原理就是這樣。具體到對接的代碼裡,主要是2個流程:
1、應用主動發訊息給。應用調用sendReq方法,然後在onResp方法裡處理的響應
2、發訊息給應用。應用在onReq裡處理的請求,然後調用sendResp方法發響應到
然後這2個流程裡用到的參數,都是SDK裡提供的封裝類,如SendMessageToWXReq,WXMediaMessage等
對接的限制
如上所述,由於SDK並沒有提供應用直接發送請求到伺服器的能力,而只能帶參數跳轉到APP,所以接入的限制還是比較大的,很多事情都做不了。
比如說,使用者的裝置上一定要裝有,而且已經處於登陸狀態。因此很多for iPad的APP,就很難對接。因為會在iPad上安裝的使用者是很少的,一般都是裝在手機上
還有,也無法實現在自己的APP裡選定使用者發送,只能是編輯好內容,跳到裡,在通訊錄裡選要發送的好友
也不能根據手機號,直接向帳號發送申請加為好友的請求
……
儘管如此,對接之後,對APP的社交傳播還是有較大的價值,所以現在可以看到大部分的APP,都有接入的功能