京东下单接口sdk java,Flutter 插件开发-接入京东SDK唤醒(ios篇)
Flutter 插件開發-實戰京東SDK喚醒(ios)
本項目基于Flutter版本1.12開發,功能是flutter可以通過京東的sdk喚醒京東app打開商品的詳情。項目中的appkey需要自己申請,在這文章主要記錄本人學習寫插件的過程。
項目地址
總體的效果如下所示:
創建插件工程
通過Android stuido 工具來創建插件工程,其他方式可以用命令來創建。
寫上包名就可以,這里默認不選,指的是插件以java和oc的實現。下一步等待創建完成。
創建后的工程目錄
lib:插件flutter調用原生的代碼
android: 實現Android的插件代碼
ios: 實現ios的插件代碼
example: 默認示例的代碼
編譯和運行ios插件示例
這里先把創建的插件工程編譯和運行起來,因為ios有些坑需要記錄下。不像android那樣直接跑就行了。
首先需要在example工程下的ios目錄,執行futter build ios,主要是需要pod install,生成xxx.workspace的一些配置
flutter build ios
運行xcode ,報錯Building for iOS, but the linked and embedded framework ‘App.framework’,如果你能順利跑起來,無視接下來的解決方案,跳過就此小節。
回到項目的根目錄,執行flutter clean
flutter clean
然后刪除ios/Flutter/App.framework
rm -rf ios/Flutter/App.framework
再次運行xcode就可以了。
編寫flutter的插件調用代碼
打開lib目錄,默認有一個官方提供的方法是調用原生代碼獲取版本號的功能。本項目有兩個功能,一個是京東sdk的初始化,一個是通過京東商品的url喚醒京東app的商品詳情頁。
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
class Jdsdk {
static const MethodChannel _channel =
const MethodChannel('jdsdk');
static Future get platformVersion async {
final String version = await _channel.invokeMethod('getPlatformVersion');
return version;
}
///初始化sdk
static Future init({@required String appKey, @required String appSecret}) async {
final String version = await _channel.invokeMethod('init',{"appKey": appKey, "appSecret": appSecret});
return version;
}
///打開京東任意url
static Future openUrl({@required String url}) async {
final String version = await _channel.invokeMethod('openUrl',{"url": url});
return version;
}
}
導入SDK的Bundler和Framework
這里演示ios端添加京東sdk的幾個步驟
sdk的內容有兩個,一個bundle,一個Framework
打開xcode工程,通過下面的方式打開,還可以使用example目錄下的ios目錄打開也一樣
JDSDK.bundle的添加,這里選擇了copy item和Create groups。這個bundle下面只有一張safe.jpg的安全圖片,需要到京東官方后天管理去下載生成才可以用。
4.Framework的添加
新建Framework文件夾,并將SDK的framework拉入該文件夾下。
回到xcode工程,添加剛剛framework,彈框不用選擇copy。
添加幾個系統的庫,這是接入文檔要求的。
最后在插件podspec文件,添加如下代碼,終端進入example下ios目錄執行pod install
s.vendored_frameworks = 'Framework/*.framework'
開發ios原生的實現接口
目錄有點深,看圖
JdsdkPlugin.m就是要實現的原生代碼,handleMethodCall就是dart調用的函數。直接上代碼,init 和openUrl就是上面lib目錄定義的接口參數要一致,不然調用不到。
- (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result {
if ([@"getPlatformVersion" isEqualToString:call.method]) {
result([@"iOS " stringByAppendingString:[[UIDevice currentDevice] systemVersion]]);
} else if ([@"init" isEqualToString:call.method]) {
NSLog(@"init flutter");
//初始化sdk具體實現
NSString *appKey = call.arguments[@"appKey"];
NSString *appSecret = call.arguments[@"appSecret"];
NSLog (@"appKey is :%@", appKey);
NSLog (@"appSecret is :%@", appSecret);
[[KeplerApiManager sharedKPService]asyncInitSdk:appKey secretKey:appSecret sucessCallback:^(){
NSLog (@"success");
result(@"{status:1}");
}failedCallback:^(NSError *error){
NSLog (@"fail");
result(@"{status:0}");
}];
}else if ([@"openUrl" isEqualToString:call.method]) {
//打開京東任意url
NSString *url = call.arguments[@"url"];
if ([[UIApplication sharedApplication]canOpenURL:[NSURL URLWithString:[NSString stringWithFormat:@"openapp.jdmobile://"]]]) {//判斷是否安裝京東app
[ [KeplerApiManager sharedKPService]openKeplerPageWithURL:url userInfo:nil successCallback:^{
NSLog (@"success");
result(@"{status:1}");
} failedCallback:^(NSInteger code, NSString * _Nonnull url) {
NSLog (@"fail");
result(@"{status:0}");
}];
}else{
result(@"{status:0}");
}
}else {
result(FlutterMethodNotImplemented);
}
}
具體如何使用?
本文地址:https://blog.csdn.net/weixin_42797048/article/details/106750190
希望與廣大網友互動??
點此進行留言吧!
總結
以上是生活随笔為你收集整理的京东下单接口sdk java,Flutter 插件开发-接入京东SDK唤醒(ios篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 013,spring boot下Jedi
- 下一篇: Recurdyn与AMESim联合仿真出