如何跨平台与Android和IOS

Posted

技术标签:

【中文标题】如何跨平台与Android和IOS【英文标题】:How can I cross platform with Android and IOS 【发布时间】:2019-08-31 01:22:30 【问题描述】:

我已经在 androidios 中创建了一个应用程序。我是应用程序的最后一道障碍。我能够让 Android 用户与 IOS 用户一起工作,而 IOS 有一个 tableview。

现在我面临一个不同的问题。如果 iOS 应用程序上的“骑手”请求搭车并且 Android 驱动程序可用 - 我该如何完成这个用例?

如果iOS用户发出请求,流程如下:

func requestPressed(_ sender: Any) 
    print("... requestPressed")

    let dict = selectedPin!.addressDictionary
    if dict?.count == 0 
        // this isn't shown to the user, just in your debug window
        print("no addresses available, try again in a few seconds")
        return
    
    
    destAddress = selectedPin!.addressDictionary!["Street"] as? String ?? "None"
    if destAddress == "None" 
        print("no valid address available, try again in a few seconds")
        return
    
    
    if userLocation != nil 
        print("my userLocation: \(userLocation!)")
        if canRequestRyde  // if true ...

            // get the destination area name, and the price
            areaNameDestination = DriveHandler.Instance.getAreaName(latitude: destLat, longitude: destLong)
            print("destination area \(areaNameDestination)")

            requestFarePrice()
            
            rRideHandler.Instance.requestRide(latitude: Double(userLocation!.latitude), longitude: Double(userLocation!.longitude), destLat: Double(destLat), destLong: Double(destLong), currentAddress: self.currentAddress, destAddress: destAddress, farePrice: farePrice)
            
            // reset the driver message
            driverMessage = ""
            
            canRequestRide(delegateCalled: true, request: nil)
            
         else 

            riderCancelled()
        
        
    


Firebase 条目如下所示:

我需要做的是让在线 Android 驱动程序接受/拒绝请求并按照步骤操作,就好像它是 Android Rider 与 Android 驱动程序一样。

如果 Android 请求搭车并按“请求”按钮,以下是步骤:

private void requestPickupHere(String uid) 

        Log.e(TAG, "requestPickupHere");

        DatabaseReference dbRequest = FirebaseDatabase.getInstance().getReference(Common
                .request_tbl); // "RideRequests"

        GeoFire mGeoFire = new GeoFire(dbRequest);
        mGeoFire.setLocation(uid, new GeoLocation(Common.mLastLocation.getLatitude(),
                Common.mLastLocation.getLongitude()));

        // write to db
        if (search_bar_destination != null) 
            dbRequest.child(uid).child("destination").setValue(search_bar_destination);


         else if (tap_on_map_destination != null) 
            dbRequest.child(uid).child("destination").setValue(tap_on_map_destination);
        

        dbRequest.child(riderId).child("status").setValue(""); 

        if (mUserMarker.isVisible()) 
            mUserMarker.remove();
        

        // Add a new marker
        mUserMarker = mMap.addMarker(new MarkerOptions()
                .title("Pickup Here")
                .snippet("")
                .position(new LatLng(Common.mLastLocation.getLatitude(), Common.mLastLocation.getLongitude()))
                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)));

        mUserMarker.showInfoWindow();

        btnRequest.setText("Getting your DRIVER ...");

        location = getCompleteAddressString(Common.mLastLocation.getLatitude(), Common.mLastLocation.getLongitude());
        Log.e(TAG, "riders location = " + location);

        findDriver();

运行上述代码时,它会打开位于驱动程序应用程序中的“客户呼叫”活动,驱动程序可以在其中接受/拒绝请求。

我怎样才能让请求从 IOS Rider 发送到 Android 驱动程序,就像它在 Android 到 Android 中的工作方式一样?

【问题讨论】:

您从项目设置中为同一个项目添加了 android 和 ios 应用程序? 在 Firebase 中是的 所以如果你共享同一个数据库,无论你使用什么平台都不会有任何问题 【参考方案1】:

使用不同的平台应该不是问题,当用户请求乘车时,您可以在数据库中的驱动程序下添加一个属性,例如:

DriverRides
       DriverId
            Name: peter
            purpose: needs a ride

然后,您可以在recyclerview 中检索要为该驱动程序显示的所有请求。用户使用什么手机无关紧要,除非您希望 android 用户接受请求而 ios 用户发送请求。


您在两个平台上使用相同的数据库,因此当 ios 用户或 android 用户存储数据时,它将转到同一个位置。例如,如果用户 x 使用 iPhone,用户 y 使用三星,您将在数据库中执行以下操作:

Users
  UserId1
     name: userx
     age: 100
  UserId2
     name: usery
     age: 120

【讨论】:

我试图让 ios 和 android 用户都成为骑手或司机。我有 android Rider 到 ios 驱动程序工作,Ios 到 ios 工作,android 到 andtoid 工作但现在我包含的代码,不知道如何让 ios Rider 到 android 驱动程序工作 正如 Sam 在上面的评论中所说的以及我在回答中所说的那样,您使用的是数据库,我不确定您为什么要区分不同的平台并比平时做更多的工作。 ios和android用户可以将数据存储在同一个数据库中应该没有问题,应该没有平台问题.. 这是我的第一个应用程序,所以我不知道如何跨平台。不知道如何按照山姆所说的方式去做。任何示例或方法将不胜感激 当我的 ios 骑手叫车时,android 司机在线但没有收到请求 使用addValueEventListener 而不是addListenerforSingleValueEvent

以上是关于如何跨平台与Android和IOS的主要内容,如果未能解决你的问题,请参考以下文章

跪求 DES跨(C# Android IOS)三个平台通用的加解密方法

REACT NATIVE 系列教程之七统一ANDROID与IOS两个平台的程序入口&&区分平台的组件简介

如何在适用于 Android 和 iOS 的 C++ 跨平台库中正确链接 OpenCV?

Quickblox - 如何将通知推送到 Android 和 iOS 平台?

通过 WiFi 与 Android/iOS 通信的跨平台服务器应用程序

利用 Flutter 如何优雅的调用 Android 原生方法?