一.FaceBook
1.登录fb官网获取需要的参数,appId,app key, bundle id.(需要翻墙)
2.集成sdk到项目中(ios主要用xcode)。将Bolts.framework,FBSDKCoreKit.Framework,FBSDKLoginKit.Framework,FBSDKShareKit.Framework拖拽至项目的Frameworks中。在拖拽选项中选择Copy items if needed和Create groups。
3.配置xcode工程
右键点击info.plist文件,选择open as source code
设置URLSchemes.
复制粘贴以下代码到XML的中
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>FB AppId</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>FB AppId</string>
<key>FacebookDisplayName</key>
<string>应用名称</string>
注:这儿可能会崩溃,打开info->URL Types添加url
设置白名单【ios9特有】
LSApplicationQueriesSchemes
fbapi
fb-messenger-api
fbauth2
fbshareextension
4.添加系统资源库
点击target->General->Linked Frameworks and Libraries,点击左下角的+号按钮
Security.framework
libiconv.dylib
SystemConfiguration.framework
CoreGraphics.Framework
libsqlite3.dylib
CoreTelephony.framework
libstdc++.dylib
libz.dylib
Accounts.framework
5.fb登录时会打开浏览器,需要添加如下代码:
a.引入头文件
#import
#import
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
[SDKManagerinitSDK:@"FaceBookSDK"];
[FBSDKProfileenableUpdatesOnAccessTokenChange:YES];
[[FBSDKApplicationDelegatesharedInstance]application:applicationdidFinishLaunchingWithOptions:launchOptions];
[[NSNotificationCenterdefaultCenter]addObserverForName:FBSDKProfileDidChangeNotificationobject:nilqueue:nilusingBlock:^(NSNotification*note) {
NSLog(@"FBSDKProfileDidChangeNotification");
}];
}
- (BOOL)application:(UIApplication*)app openURL:(NSURL*)url options:(NSDictionary *)options
{
return[[FBSDKApplicationDelegatesharedInstance]application:appopenURL:urlsourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]annotation:options[UIApplicationOpenURLOptionsAnnotationKey]];
}
- (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation {
return[[FBSDKApplicationDelegatesharedInstance]application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation
];
}
b.记录应用被激活
- (void)applicationDidBecomeActive:(UIApplication*)application {
cocos2d::Director::getInstance()->resume();
[FBSDKAppEventsactivateApp];
}
6.ok,准备工作完成,接下来正式开始登录
FaceBookSDK.h
游戏内登录可以直接走网页登录,所以省略interface builder这个界面。直接用FBSDKLoginManager来登录。
登录成功后按照js和lua不同的回调方式将参数传回loginSuccess。[此示例为js]
二:亚马逊商城
1.翻墙到亚马逊官网下载最新版sdk和demo.demo的代码直接可以拿来用
2.准备工作。配置AndroidManifest.xml文件
..
<receiver
android:name="com.amazon.device.iap.ResponseReceiver">
<intent-filter>
<action android:name="com.amazon.inapp.purchasing.NOTIFY"
android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY"/>
</intent-filter>
<receiver/>
..
</application>
3.将IAP API与应用集成
在onCreate()方法中调用registerListener()。
在onResume()方法中调用getUserData()。
在onResume()方法中调用getPurchaseUpdates()。
在onResume()方法中调用getProductData()。
代码如下:
private SampleIapManager sampleIapManager;
protected void onCreate(final Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
this.setupIAPOnCreate();
}
publicvoidsetupIAPOnCreate(){
sampleIapManager=newSampleIapManager(this);
sampleIapManager.activate();
finalSamplePurchasingListenerpurchasingListener=newSamplePurchasingListener(sampleIapManager);
PurchasingService.registerListener(SDKManager.getContext(),purchasingListener);
System.out.print("IS_SANDBOX_MODE:"+ PurchasingService.IS_SANDBOX_MODE);
}
protectedvoidonPause() {
super.onPause();
sampleIapManager.deactivate();
}
protectedvoidonResume() {
super.onResume();
sampleIapManager.activate();
PurchasingService.getUserData();
PurchasingService.getPurchaseUpdates(false);
}
4.得到sku.将demo中的sku改为自己项目中的产品列表
publicenumMySku {
productUs1(“珍珠1","US"),
productUs2(“珍珠2","US"),
productUs3(“珍珠3","US”);
}
publicstaticMySku fromSku(finalStringsku,finalStringmarketplace) {
MySkumySku=null;
if(productUs1.getSku().equals(sku) && (productUs1.getAvailableMarketplace().equals (marketplace))) {
mySku=productUs1;
}
if(productUs2.getSku().equals(sku) && (productUs2.getAvailableMarketplace().equals (marketplace))) {
mySku=productUs2;
}
if(productUs3.getSku().equals(sku) && (productUs3.getAvailableMarketplace().equals (marketplace))) {
mySku=productUs3;
}
if(productUs4.getSku().equals(sku) && (productUs4.getAvailableMarketplace().equals (marketplace))) {
mySku=productUs4;
}
if(productUs5.getSku().equals(sku) && (productUs5.getAvailableMarketplace().equals (marketplace))) {
mySku=productUs5;
}
if(productUs6.getSku().equals(sku) && (productUs6.getAvailableMarketplace().equals (marketplace))) {
mySku=productUs6;
}
returnmySku;
}
5.购买代码(此处为js和java交互)
publicvoidsetYMXSKUs(StringskuJson){
try{
JSONObjectjo=newJSONObject(skuJson);
JSONArrayskus=jo.getJSONArray("skus");
productSkus=newHashSet();
for(inti=0;i
productSkus.add(skus.getString(i));
}
}catch(JSONExceptionee) {
}
}
publicvoidonBuyOrangeClick(Stringsku,Stringmarketplace) {
MySkumySku= MySku.fromSku(sku,marketplace);
finalRequestIdrequestId= PurchasingService.purchase(mySku.getSku());
}
//回调PurchasingListener,主要修改onPurchaseResponse
publicvoidonPurchaseResponse(finalPurchaseResponseresponse) {
finalStringrequestId=response.getRequestId().toString();
finalStringuserId=response.getUserData().getUserId();
finalPurchaseResponse.RequestStatusstatus=response.getRequestStatus();
Log.d(TAG,"onPurchaseResponse: requestId ("+requestId
+") userId ("
+userId
+") purchaseRequestStatus ("
+status
+")");
switch(status) {
caseSUCCESSFUL:
finalReceiptreceipt=response.getReceipt();
iapManager.setAmazonUserId(response.getUserData().getUserId(),response.getUserData().getMarketplace());
Log.d(TAG,"onPurchaseResponse: receipt json11:"+receipt.toJSON());
iapManager.handleReceipt(receipt,response.getUserData());
iapManager.refreshOranges();
try{
JSONObjectjson=newJSONObject();
json.put("userId",userId);
json.put("receipt",receipt.toJSON());
json.put("requestId",requestId);
Stringdata=json.toString();
Stringarg= String.format("bs.SDKManager.getInstance().paySuccess("+data+")");
SDKManager.dispatchEvent(arg);
}catch(JSONExceptione) {
e.printStackTrace();
}
break;
caseALREADY_PURCHASED:
Log.d(TAG,"onPurchaseResponse: already purchased, should never get here for a consumable.");
break;
caseINVALID_SKU:
Log.d(TAG,
"onPurchaseResponse: invalid SKU! onProductDataResponse should have disabled buy button already.");
finalSetunavailableSkus=newHashSet();
unavailableSkus.add(response.getReceipt().getSku());
iapManager.disablePurchaseForSkus(unavailableSkus);
break;
caseFAILED:
caseNOT_SUPPORTED:
Log.d(TAG,"onPurchaseResponse: failed so remove purchase request from local storage");
iapManager.purchaseFailed(response.getReceipt().getSku());
break;
}
}
注:测试流程,在亚马逊下载amazon tester app,然后在应用页面下载产品列表的.json文件。通过adb push .json /mnt/sdcard/ 到手机就可以测试沙盒环境下的支付。测试通过后提交应用到后台,通过后可测试正式环境。