一.FaceBook
1.登錄fb官網(wǎng)獲取需要的參數(shù),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
設(shè)置URLSchemes.
復(fù)制粘貼以下代碼到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>應(yīng)用名稱</string>
注:這兒可能會崩潰,打開info->URL Types添加url

設(shè)置白名單【ios9特有】
LSApplicationQueriesSchemes
fbapi
fb-messenger-api
fbauth2
fbshareextension
4.添加系統(tǒng)資源庫
點擊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.記錄應(yīng)用被激活
- (void)applicationDidBecomeActive:(UIApplication*)application {
cocos2d::Director::getInstance()->resume();
[FBSDKAppEventsactivateApp];
}
6.ok,準(zhǔn)備工作完成,接下來正式開始登錄
FaceBookSDK.h

游戲內(nèi)登錄可以直接走網(wǎng)頁登錄,所以省略interface builder這個界面。直接用FBSDKLoginManager來登錄。

登錄成功后按照js和lua不同的回調(diào)方式將參數(shù)傳回loginSuccess。[此示例為js]
二:亞馬遜商城
1.翻墻到亞馬遜官網(wǎng)下載最新版sdk和demo.demo的代碼直接可以拿來用
2.準(zhǔn)備工作。配置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與應(yīng)用集成
在onCreate()方法中調(diào)用registerListener()。
在onResume()方法中調(diào)用getUserData()。
在onResume()方法中調(diào)用getPurchaseUpdates()。
在onResume()方法中調(diào)用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改為自己項目中的產(chǎn)品列表
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());
}
//回調(diào)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,然后在應(yīng)用頁面下載產(chǎn)品列表的.json文件。通過adb push .json /mnt/sdcard/? 到手機就可以測試沙盒環(huán)境下的支付。測試通過后提交應(yīng)用到后臺,通過后可測試正式環(huán)境。